cdk-preflight 0.0.32 → 0.0.34
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/.claude/skills/find-preflight-rules/SKILL.md +1 -1
- package/.jsii +3 -3
- package/AGENTS.md +9 -1
- package/docs/rules.md +26 -1
- package/lib/index.js +6 -3
- package/lib/private/enforce.d.ts +1 -1
- package/lib/private/enforce.js +6 -2
- package/lib/rules.generated.d.ts +6 -0
- package/lib/rules.generated.js +289 -4
- package/package.json +1 -1
package/lib/rules.generated.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BUNDLED_RULES = void 0;
|
|
3
|
+
exports.BUNDLED_LIBS = exports.BUNDLED_RULES = void 0;
|
|
4
4
|
exports.BUNDLED_RULES = [
|
|
5
5
|
{
|
|
6
6
|
"id": "pf-apigw-access-log-format-request-id",
|
|
@@ -2752,16 +2752,294 @@ exports.BUNDLED_RULES = [
|
|
|
2752
2752
|
],
|
|
2753
2753
|
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqssse_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqssse_fix := \"Keep either SqsManagedSseEnabled: true (SSE-SQS) or KmsMasterKeyId (SSE-KMS); SqsManagedSseEnabled: false with a key is fine\"\n\nviolation contains make_diag_full(\"pf-sqs-sse-exclusive\", \"ERROR\", name,\n\t\"Properties.KmsMasterKeyId\",\n\t\"SqsManagedSseEnabled is true and KmsMasterKeyId is set; CreateQueue fails with \\\"You can use one type of server-side encryption (SSE) at one time. You can either enable KMS SSE or SQS SSE.\\\"\",\n\t_pf_sqssse_fix, _pf_sqssse_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tresolve(name, \"Properties.SqsManagedSseEnabled\") in {true, \"true\"}\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"KmsMasterKeyId\", \"__pf_absent\") != \"__pf_absent\"\n}\n"
|
|
2754
2754
|
},
|
|
2755
|
+
{
|
|
2756
|
+
"id": "pf-sfn-asl-branch-shape",
|
|
2757
|
+
"service": "stepfunctions",
|
|
2758
|
+
"severity": "ERROR",
|
|
2759
|
+
"title": "Parallel Branches is a non-empty array and every branch / Map ItemProcessor / Iterator carries both StartAt and States",
|
|
2760
|
+
"upstream": "none",
|
|
2761
|
+
"resourceTypes": [
|
|
2762
|
+
"AWS::StepFunctions::StateMachine"
|
|
2763
|
+
],
|
|
2764
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnbr_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-parallel.html\"\n\n_pf_sfnbr_fix := \"Give every branch and item processor a StartAt and a States object; a Parallel needs at least one branch\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-branch-shape\", \"ERROR\", name,\n\tsprintf(\"%s.Branches\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Parallel state '%s' has an empty Branches array; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value cannot be empty\\\"\", [sname]),\n\t_pf_sfnbr_fix, _pf_sfnbr_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Parallel\"\n\tarr := object.get(st, \"Branches\", null)\n\tis_array(arr)\n\tcount(arr) == 0\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-branch-shape\", \"ERROR\", name,\n\tsprintf(\"%s.Branches[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Parallel state '%s' branch %d has no %s; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [%s]\\\"\", [sname, i, req, req]),\n\t_pf_sfnbr_fix, _pf_sfnbr_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Branches\", [])\n\tis_array(arr)\n\tsome i, b in arr\n\tis_object(b)\n\tsome req in [\"StartAt\", \"States\"]\n\tnot _pf_sfnlib_has(b, req)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-branch-shape\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' %s has no %s; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [%s]\\\"\", [sname, key, req, req]),\n\t_pf_sfnbr_fix, _pf_sfnbr_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\tproc := object.get(st, key, null)\n\tis_object(proc)\n\tsome req in [\"StartAt\", \"States\"]\n\tnot _pf_sfnlib_has(proc, req)\n}\n"
|
|
2765
|
+
},
|
|
2766
|
+
{
|
|
2767
|
+
"id": "pf-sfn-asl-choice-rules",
|
|
2768
|
+
"service": "stepfunctions",
|
|
2769
|
+
"severity": "ERROR",
|
|
2770
|
+
"title": "Choice rules: Choices is non-empty, each top-level rule has Next and exactly one selector (Variable / And / Or / Not / Condition), a Variable rule has exactly one comparator, and Next never sits inside And/Or/Not",
|
|
2771
|
+
"upstream": "none",
|
|
2772
|
+
"resourceTypes": [
|
|
2773
|
+
"AWS::StepFunctions::StateMachine"
|
|
2774
|
+
],
|
|
2775
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnch_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-choice.html\"\n\n_pf_sfnch_fix := \"Give every top-level Choice rule one comparison (or one And/Or/Not/Condition) and a Next; nested rules carry no Next\"\n\n_pf_sfnch_cmp := {\"StringEquals\", \"StringEqualsPath\", \"StringLessThan\", \"StringLessThanPath\", \"StringGreaterThan\", \"StringGreaterThanPath\", \"StringLessThanEquals\", \"StringLessThanEqualsPath\", \"StringGreaterThanEquals\", \"StringGreaterThanEqualsPath\", \"StringMatches\", \"NumericEquals\", \"NumericEqualsPath\", \"NumericLessThan\", \"NumericLessThanPath\", \"NumericGreaterThan\", \"NumericGreaterThanPath\", \"NumericLessThanEquals\", \"NumericLessThanEqualsPath\", \"NumericGreaterThanEquals\", \"NumericGreaterThanEqualsPath\", \"BooleanEquals\", \"BooleanEqualsPath\", \"TimestampEquals\", \"TimestampEqualsPath\", \"TimestampLessThan\", \"TimestampLessThanPath\", \"TimestampGreaterThan\", \"TimestampGreaterThanPath\", \"TimestampLessThanEquals\", \"TimestampLessThanEqualsPath\", \"TimestampGreaterThanEquals\", \"TimestampGreaterThanEqualsPath\", \"IsNull\", \"IsPresent\", \"IsNumeric\", \"IsString\", \"IsBoolean\", \"IsTimestamp\"}\n\n_pf_sfnch_sel := {\"And\", \"Or\", \"Not\", \"Variable\", \"Condition\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Choice state '%s' has an empty Choices array; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value cannot be empty\\\"\", [sname]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Choice\"\n\tarr := object.get(st, \"Choices\", null)\n\tis_array(arr)\n\tcount(arr) == 0\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d has no Next; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [Next]\\\"\", [sname, i]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tnot _pf_sfnlib_has(c, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, op]),\n\tsprintf(\"Choice state '%s' rule %d nests a Next inside %s; only the top-level rule may carry Next, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'Next' is not supported\\\"\", [sname, i, op]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tsome op in [\"And\", \"Or\"]\n\tarr := object.get(c, op, [])\n\tis_array(arr)\n\tsome sub in arr\n\tis_object(sub)\n\t_pf_sfnlib_has(sub, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d].Not\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d nests a Next inside Not; only the top-level rule may carry Next, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'Next' is not supported\\\"\", [sname, i]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tsub := object.get(c, \"Not\", null)\n\tis_object(sub)\n\t_pf_sfnlib_has(sub, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d has %d comparison operators; a Variable rule takes exactly one, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [StringEquals, ...]\\\"\", [sname, i, n]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\t_pf_sfnlib_has(c, \"Variable\")\n\tn := count({k | some k, _ in c; k in _pf_sfnch_cmp})\n\tn != 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d must have exactly one of And / Or / Not / Variable / Condition (found %d); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The object must have only one of the following fields, [And, Or, Not, Variable, Condition]\\\"\", [sname, i, n]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tn := count({k | some k, _ in c; k in _pf_sfnch_sel})\n\tn != 1\n}\n"
|
|
2776
|
+
},
|
|
2777
|
+
{
|
|
2778
|
+
"id": "pf-sfn-asl-credentials",
|
|
2779
|
+
"service": "stepfunctions",
|
|
2780
|
+
"severity": "ERROR",
|
|
2781
|
+
"title": "A Task Credentials object needs RoleArn, and Credentials is not accepted on an Activity resource",
|
|
2782
|
+
"upstream": "none",
|
|
2783
|
+
"resourceTypes": [
|
|
2784
|
+
"AWS::StepFunctions::StateMachine"
|
|
2785
|
+
],
|
|
2786
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfncred_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-task.html\"\n\n_pf_sfncred_fix := \"Set Credentials.RoleArn (or RoleArn.$); drop Credentials from activity tasks\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-credentials\", \"ERROR\", name,\n\tsprintf(\"%s.Credentials\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' has Credentials without RoleArn; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'RoleArn' is required but was missing\\\"\", [sname]),\n\t_pf_sfncred_fix, _pf_sfncred_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tcred := object.get(st, \"Credentials\", null)\n\tis_object(cred)\n\tnot _pf_sfnlib_has(cred, \"RoleArn\")\n\tnot _pf_sfnlib_has(cred, \"RoleArn.$\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-credentials\", \"ERROR\", name,\n\tsprintf(\"%s.Credentials\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' sets Credentials on an Activity resource; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'Credentials' is not supported for activities\\\"\", [sname]),\n\t_pf_sfncred_fix, _pf_sfncred_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_has(st, \"Credentials\")\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tregex.match(\"^arn:[^:]+:states:[^:]+:[^:]+:activity:\", res)\n}\n"
|
|
2787
|
+
},
|
|
2788
|
+
{
|
|
2789
|
+
"id": "pf-sfn-asl-duplicate-state-name",
|
|
2790
|
+
"service": "stepfunctions",
|
|
2791
|
+
"severity": "ERROR",
|
|
2792
|
+
"title": "ASL state names must be unique across the whole state machine, including Parallel branches and Map item processors",
|
|
2793
|
+
"upstream": "none",
|
|
2794
|
+
"resourceTypes": [
|
|
2795
|
+
"AWS::StepFunctions::StateMachine"
|
|
2796
|
+
],
|
|
2797
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfndup_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-parallel.html\"\n\n_pf_sfndup_fix := \"Rename one of the states; names are global to the state machine, not to the branch\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-duplicate-state-name\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p2, sname),\n\tsprintf(\"state name '%s' is defined in both %s and %s; names must be unique across the whole state machine, and CreateStateMachine fails with \\\"DUPLICATE_STATE_NAME: Duplicate State name: %s\\\"\", [sname, p1, p2, sname]),\n\t_pf_sfndup_fix, _pf_sfndup_url) if {\n\tsome [name, p1, _, sname, _] in _pf_sfnlib_states\n\tsome [n2, p2, _, sn2, _] in _pf_sfnlib_states\n\tn2 == name\n\tsn2 == sname\n\tp1 < p2\n}\n"
|
|
2798
|
+
},
|
|
2799
|
+
{
|
|
2800
|
+
"id": "pf-sfn-asl-integration-parameters",
|
|
2801
|
+
"service": "stepfunctions",
|
|
2802
|
+
"severity": "ERROR",
|
|
2803
|
+
"title": "An arn:<partition>:states::: integration Task needs Parameters (JSONPath) or Arguments (JSONata), and the common integrations need their required fields (lambda:invoke FunctionName, sqs:sendMessage QueueUrl+MessageBody, sns:publish Message, dynamodb:putItem TableName+Item, dynamodb:getItem TableName+Key, states:startExecution StateMachineArn, events:putEvents Entries, ecs:runTask TaskDefinition, glue:startJobRun JobName)",
|
|
2804
|
+
"upstream": "none",
|
|
2805
|
+
"resourceTypes": [
|
|
2806
|
+
"AWS::StepFunctions::StateMachine"
|
|
2807
|
+
],
|
|
2808
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnip_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html\"\n\n_pf_sfnip_fix := \"Add a Parameters (or Arguments) object with the fields the integration requires\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-integration-parameters\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Task state '%s' calls the %s:%s integration without a Parameters object; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Parameters field is required for resource ARN: arn:aws:states:::%s:%s\\\"\", [sname, svc, api, svc, api]),\n\t_pf_sfnip_fix, _pf_sfnip_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\t_pf_sfnlib_ql(name, st) == \"JSONPath\"\n\tnot _pf_sfnlib_has(st, \"Parameters\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-integration-parameters\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"JSONata Task state '%s' calls the %s:%s integration without an Arguments object; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Arguments field is required for resource ARN: arn:aws:states:::%s:%s\\\"\", [sname, svc, api, svc, api]),\n\t_pf_sfnip_fix, _pf_sfnip_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tnot _pf_sfnlib_has(st, \"Arguments\")\n}\n\n# Required request fields, measured with ValidateStateMachineDefinition on\n# 2026-09-05 (a \".$\" suffixed key counts as present).\n_pf_sfnip_req contains [\"lambda\", \"invoke\", \"FunctionName\"]\n\n_pf_sfnip_req contains [\"sqs\", \"sendMessage\", \"QueueUrl\"]\n\n_pf_sfnip_req contains [\"sqs\", \"sendMessage\", \"MessageBody\"]\n\n_pf_sfnip_req contains [\"sns\", \"publish\", \"Message\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"putItem\", \"TableName\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"putItem\", \"Item\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"getItem\", \"TableName\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"getItem\", \"Key\"]\n\n_pf_sfnip_req contains [\"states\", \"startExecution\", \"StateMachineArn\"]\n\n_pf_sfnip_req contains [\"events\", \"putEvents\", \"Entries\"]\n\n_pf_sfnip_req contains [\"ecs\", \"runTask\", \"TaskDefinition\"]\n\n_pf_sfnip_req contains [\"glue\", \"startJobRun\", \"JobName\"]\n\n_pf_sfnip_params(st) := prm if {\n\tprm := object.get(st, \"Parameters\", null)\n\tis_object(prm)\n}\n\n_pf_sfnip_params(st) := prm if {\n\tnot is_object(object.get(st, \"Parameters\", null))\n\tprm := object.get(st, \"Arguments\", null)\n\tis_object(prm)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-integration-parameters\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Task state '%s' calls %s:%s without the required field '%s'; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field '%s' is required but was missing\\\"\", [sname, svc, base, field, field]),\n\t_pf_sfnip_fix, _pf_sfnip_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tbase := regex.replace(api, \"[.](sync|waitForTaskToken)(:2)?$\", \"\")\n\tsome [s2, b2, field] in _pf_sfnip_req\n\ts2 == svc\n\tb2 == base\n\tprm := _pf_sfnip_params(st)\n\tnot _pf_sfnlib_has(prm, field)\n\tnot _pf_sfnlib_has(prm, sprintf(\"%s.$\", [field]))\n}\n"
|
|
2809
|
+
},
|
|
2810
|
+
{
|
|
2811
|
+
"id": "pf-sfn-asl-jsonpath-syntax",
|
|
2812
|
+
"service": "stepfunctions",
|
|
2813
|
+
"severity": "ERROR",
|
|
2814
|
+
"title": "JSONPath fields start with $ (InputPath, OutputPath, *Path, Choice Variable), ResultPath/ItemsPath are Reference Paths (no *, .., ?, @), values of \".$\" keys are a path or a States.* intrinsic, and Assign variable names are alphanumeric and not the reserved \"states\"",
|
|
2815
|
+
"upstream": "none",
|
|
2816
|
+
"resourceTypes": [
|
|
2817
|
+
"AWS::StepFunctions::StateMachine"
|
|
2818
|
+
],
|
|
2819
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnjp_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/input-output-paths.html\"\n\n_pf_sfnjp_fix := \"Write paths as $.field (Reference Paths for ResultPath/ItemsPath), \\\".$\\\" values as $.path or States.Func(...), and variable names as letters/digits\"\n\n_pf_sfnjp_pathfields := {\"InputPath\", \"OutputPath\", \"ResultPath\", \"ItemsPath\", \"TimeoutSecondsPath\", \"HeartbeatSecondsPath\", \"SecondsPath\", \"TimestampPath\", \"MaxConcurrencyPath\", \"ToleratedFailurePercentagePath\", \"ToleratedFailureCountPath\", \"ErrorPath\", \"CausePath\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s '%s' is not a JSONPath (must start with $); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value must be a valid JSONPath.\\\"\", [sname, f, v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in _pf_sfnjp_pathfields\n\tv := object.get(st, f, null)\n\tis_string(v)\n\tnot startswith(v, \"$\")\n\tnot contains(v, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, k]),\n\tsprintf(\"Choice state '%s' rule %d %s '%s' is not a Reference Path (must start with $); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value is not a Reference Path: Reference path didn't start with '$'\\\"\", [sname, i, k, v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tsome k, v in c\n\tis_string(v)\n\tk in {\"Variable\", \"StringEqualsPath\", \"StringLessThanPath\", \"StringGreaterThanPath\", \"StringLessThanEqualsPath\", \"StringGreaterThanEqualsPath\", \"NumericEqualsPath\", \"NumericLessThanPath\", \"NumericGreaterThanPath\", \"NumericLessThanEqualsPath\", \"NumericGreaterThanEqualsPath\", \"BooleanEqualsPath\", \"TimestampEqualsPath\", \"TimestampLessThanPath\", \"TimestampGreaterThanPath\", \"TimestampLessThanEqualsPath\", \"TimestampGreaterThanEqualsPath\"}\n\tnot startswith(v, \"$\")\n}\n\n_pf_sfnjp_refpath contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in [\"ResultPath\", \"ItemsPath\"]\n\tv := object.get(st, f, null)\n\tis_string(v)\n\tpath := sprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f])\n}\n\n_pf_sfnjp_refpath contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Catch\", [])\n\tis_array(arr)\n\tsome i, c in arr\n\tis_object(c)\n\tv := object.get(c, \"ResultPath\", null)\n\tis_string(v)\n\tpath := sprintf(\"%s.Catch[%d].ResultPath\", [_pf_sfnlib_path(name, p, sname), i])\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tpath,\n\tsprintf(\"'%s' is not a Reference Path: wildcards, filters and deep scans (* .. ? @) are not allowed where a single JSON node is addressed; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value is not a Reference Path\\\"\", [v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, path, v] in _pf_sfnjp_refpath\n\tregex.match(\"[*?@]|[.][.]\", v)\n}\n\n# \".$\" keys of payload templates (Parameters / ResultSelector / ItemSelector),\n# two levels deep.\n_pf_sfnjp_dollar contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in [\"Parameters\", \"ResultSelector\", \"ItemSelector\"]\n\to := object.get(st, f, null)\n\tis_object(o)\n\tsome k, v in o\n\tendswith(k, \".$\")\n\tis_string(v)\n\tpath := sprintf(\"%s.%s.%s\", [_pf_sfnlib_path(name, p, sname), f, k])\n}\n\n_pf_sfnjp_dollar contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in [\"Parameters\", \"ResultSelector\", \"ItemSelector\"]\n\to := object.get(st, f, null)\n\tis_object(o)\n\tsome k, o2 in o\n\tis_object(o2)\n\tsome k2, v in o2\n\tendswith(k2, \".$\")\n\tis_string(v)\n\tpath := sprintf(\"%s.%s.%s.%s\", [_pf_sfnlib_path(name, p, sname), f, k, k2])\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tpath,\n\tsprintf(\"value '%s' of a \\\".$\\\" key must be a JSONPath ($...) or an intrinsic function (States....); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The value for the field '...$' must be a valid JSONPath or a valid intrinsic function call\\\"\", [v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, path, v] in _pf_sfnjp_dollar\n\tnot startswith(v, \"$\")\n\tnot startswith(v, \"States.\")\n\tnot contains(v, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.Assign.%s\", [_pf_sfnlib_path(name, p, sname), k]),\n\tsprintf(\"state '%s' assigns the reserved variable name 'states'; CreateStateMachine fails with \\\"RESERVED_VARIABLE_NAME: Cannot assign to reserved variable '$states'.\\\"\", [sname]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\ta := object.get(st, \"Assign\", null)\n\tis_object(a)\n\tsome k, _ in a\n\tk == \"states\"\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.Assign.%s\", [_pf_sfnlib_path(name, p, sname), k]),\n\tsprintf(\"state '%s' assigns variable '%s'; variable names are letters and digits starting with a letter, and CreateStateMachine fails with \\\"INVALID_VARIABLE_NAME: Invalid variable name '%s': the variable name contains invalid characters.\\\"\", [sname, k, k]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\ta := object.get(st, \"Assign\", null)\n\tis_object(a)\n\tsome k, _ in a\n\tnot regex.match(\"^[A-Za-z][A-Za-z0-9_]*$\", k)\n}\n"
|
|
2820
|
+
},
|
|
2821
|
+
{
|
|
2822
|
+
"id": "pf-sfn-asl-map-distributed",
|
|
2823
|
+
"service": "stepfunctions",
|
|
2824
|
+
"severity": "ERROR",
|
|
2825
|
+
"title": "Map ProcessorConfig and ItemReader shape: DISTRIBUTED requires ExecutionType (STANDARD|EXPRESS) and INLINE forbids it; ItemReader.Resource is s3:getObject or s3:listObjectsV2; CSV input needs CSVHeaderLocation (GIVEN needs CSVHeaders) and JSON input forbids it",
|
|
2826
|
+
"upstream": "none",
|
|
2827
|
+
"resourceTypes": [
|
|
2828
|
+
"AWS::StepFunctions::StateMachine"
|
|
2829
|
+
],
|
|
2830
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnmd_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-map-distributed.html\"\n\n_pf_sfnmd_fix := \"Set ProcessorConfig.ExecutionType for DISTRIBUTED mode only, and shape ItemReader per the Distributed Map documentation\"\n\n_pf_sfnmd_cfg contains [name, p, sname, key, cfg] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\tproc := object.get(st, key, null)\n\tis_object(proc)\n\tcfg := object.get(proc, \"ProcessorConfig\", null)\n\tis_object(cfg)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' runs in DISTRIBUTED mode without ExecutionType; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [ExecutionType]\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, key, cfg] in _pf_sfnmd_cfg\n\tobject.get(cfg, \"Mode\", null) == \"DISTRIBUTED\"\n\tnot _pf_sfnlib_has(cfg, \"ExecutionType\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig.ExecutionType\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' ExecutionType '%s' is not STANDARD or EXPRESS; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [STANDARD, EXPRESS]\\\"\", [sname, et]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, key, cfg] in _pf_sfnmd_cfg\n\tet := object.get(cfg, \"ExecutionType\", null)\n\tis_string(et)\n\tnot et in {\"STANDARD\", \"EXPRESS\"}\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig.ExecutionType\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' sets ExecutionType in INLINE mode; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'ExecutionType' is not supported\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, key, cfg] in _pf_sfnmd_cfg\n\tobject.get(cfg, \"Mode\", null) == \"INLINE\"\n\t_pf_sfnlib_has(cfg, \"ExecutionType\")\n}\n\n_pf_sfnmd_reader contains [name, p, sname, ir] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Map\"\n\tir := object.get(st, \"ItemReader\", null)\n\tis_object(ir)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' ItemReader.Resource '%s' is not s3:getObject or s3:listObjectsV2; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'Resource' does not match any of the allowed values\\\"\", [sname, res]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\tres := object.get(ir, \"Resource\", null)\n\tis_string(res)\n\tnot contains(res, \"${\")\n\tnot regex.match(\"^arn:[^:]+:states:::s3:(getObject|listObjectsV2)$\", res)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.ReaderConfig\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' reads CSV without CSVHeaderLocation; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'CSVHeaderLocation' is required\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\trc := object.get(ir, \"ReaderConfig\", null)\n\tis_object(rc)\n\tobject.get(rc, \"InputType\", null) == \"CSV\"\n\tnot _pf_sfnlib_has(rc, \"CSVHeaderLocation\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.ReaderConfig.CSVHeaderLocation\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' reads JSON but sets CSVHeaderLocation; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'CSVHeaderLocation' is not supported\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\trc := object.get(ir, \"ReaderConfig\", null)\n\tis_object(rc)\n\tobject.get(rc, \"InputType\", null) == \"JSON\"\n\t_pf_sfnlib_has(rc, \"CSVHeaderLocation\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.ReaderConfig\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' sets CSVHeaderLocation GIVEN without CSVHeaders; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [CSVHeaders]\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\trc := object.get(ir, \"ReaderConfig\", null)\n\tis_object(rc)\n\tobject.get(rc, \"CSVHeaderLocation\", null) == \"GIVEN\"\n\tnot _pf_sfnlib_has(rc, \"CSVHeaders\")\n}\n"
|
|
2831
|
+
},
|
|
2755
2832
|
{
|
|
2756
2833
|
"id": "pf-sfn-asl-missing-state",
|
|
2757
2834
|
"service": "stepfunctions",
|
|
2758
2835
|
"severity": "ERROR",
|
|
2759
|
-
"title": "ASL Next/Default/Choices must reference a defined
|
|
2836
|
+
"title": "ASL Next/Default/Choices[].Next/Catch[].Next must reference a state defined in the same States block, at every nesting level (a dangling StartAt is covered by engine rule E3601)",
|
|
2837
|
+
"upstream": "none",
|
|
2838
|
+
"resourceTypes": [
|
|
2839
|
+
"AWS::StepFunctions::StateMachine"
|
|
2840
|
+
],
|
|
2841
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnmiss_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnmiss_fix := \"Point Next/Default/Choices[].Next/Catch[].Next at a state defined in the same States block\"\n\n# [name, scope path, scope states, state name, field label, target]\n_pf_sfnmiss_ref contains [name, p, s, sname, key, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"Next\", \"Default\"]\n\ttarget := object.get(st, key, null)\n\tis_string(target)\n}\n\n_pf_sfnmiss_ref contains [name, p, s, sname, key, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome field in [\"Choices\", \"Catch\"]\n\tarr := object.get(st, field, [])\n\tis_array(arr)\n\tsome i, c in arr\n\tis_object(c)\n\ttarget := object.get(c, \"Next\", null)\n\tis_string(target)\n\tkey := sprintf(\"%s[%d].Next\", [field, i])\n}\n\n# NOTE: a dangling StartAt (top level and Parallel branches) is deliberately\n# NOT checked here — the engine's built-in E3601 (ERROR/CFN_LINT) covers it\n# (verified against 1.7.0-beta on 2026-09-05). A Branch may not transition to\n# a state outside its own States block either: the service scopes names.\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"state '%s' references state '%s' via %s, but no state with that name is defined in the same States block; CreateStateMachine fails with \\\"MISSING_TRANSITION_TARGET: Missing 'Next' target: %s\\\"\", [sname, target, key, target]),\n\t_pf_sfnmiss_fix, _pf_sfnmiss_url) if {\n\tsome [name, p, s, sname, key, target] in _pf_sfnmiss_ref\n\tnot target in object.keys(s)\n}\n"
|
|
2842
|
+
},
|
|
2843
|
+
{
|
|
2844
|
+
"id": "pf-sfn-asl-name-limits",
|
|
2845
|
+
"service": "stepfunctions",
|
|
2846
|
+
"severity": "ERROR",
|
|
2847
|
+
"title": "ASL state names are at most 80 characters; a Distributed Map Label is at most 40 characters and unique within the state machine",
|
|
2848
|
+
"upstream": "none",
|
|
2849
|
+
"resourceTypes": [
|
|
2850
|
+
"AWS::StepFunctions::StateMachine"
|
|
2851
|
+
],
|
|
2852
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnnm_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/service-quotas.html\"\n\n_pf_sfnnm_fix := \"Shorten the state name / Label; give each Distributed Map a distinct Label\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-name-limits\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state name '%s' is %d characters long (maximum 80); CreateStateMachine fails with \\\"INVALID_STATE_NAME: ... exceeds the 80-character limit allowed by the service\\\"\", [sname, count(sname)]),\n\t_pf_sfnnm_fix, _pf_sfnnm_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tcount(sname) > 80\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-name-limits\", \"ERROR\", name,\n\tsprintf(\"%s.Label\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"state '%s' Label is %d characters long (maximum 40); CreateStateMachine fails with \\\"INVALID_LABEL_NAME: ... exceeds the 40-character limit allowed by the service\\\"\", [sname, count(l)]),\n\t_pf_sfnnm_fix, _pf_sfnnm_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tl := object.get(st, \"Label\", null)\n\tis_string(l)\n\tcount(l) > 40\n}\n\n_pf_sfnnm_label contains [name, path, l] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tl := object.get(st, \"Label\", null)\n\tis_string(l)\n\tpath := _pf_sfnlib_path(name, p, sname)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-name-limits\", \"ERROR\", name,\n\tsprintf(\"%s.Label\", [path2]),\n\tsprintf(\"Label '%s' is used by both %s and %s; Map labels must be unique, and CreateStateMachine fails with \\\"DUPLICATE_LABEL_NAME: Duplicate Label name: %s\\\"\", [l, path1, path2, l]),\n\t_pf_sfnnm_fix, _pf_sfnnm_url) if {\n\tsome [name, path1, l] in _pf_sfnnm_label\n\tsome [n2, path2, l2] in _pf_sfnnm_label\n\tn2 == name\n\tl2 == l\n\tpath1 < path2\n}\n"
|
|
2853
|
+
},
|
|
2854
|
+
{
|
|
2855
|
+
"id": "pf-sfn-asl-next-end",
|
|
2856
|
+
"service": "stepfunctions",
|
|
2857
|
+
"severity": "ERROR",
|
|
2858
|
+
"title": "A Task/Pass/Wait/Parallel/Map state carries exactly one of Next or End: true",
|
|
2859
|
+
"upstream": "none",
|
|
2860
|
+
"resourceTypes": [
|
|
2861
|
+
"AWS::StepFunctions::StateMachine"
|
|
2862
|
+
],
|
|
2863
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnne_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnne_fix := \"Keep either Next (transition) or End: true (terminal) on the state, never both and never neither\"\n\n_pf_sfnne_types := {\"Task\", \"Pass\", \"Wait\", \"Parallel\", \"Map\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-next-end\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state '%s' has both Next and End: true; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [Next, End]\\\"\", [sname]),\n\t_pf_sfnne_fix, _pf_sfnne_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) in _pf_sfnne_types\n\t_pf_sfnlib_has(st, \"Next\")\n\tobject.get(st, \"End\", false) == true\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-next-end\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state '%s' has neither Next nor End: true, so the execution cannot leave it; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: This object should have only one of the following fields: [Next, End]\\\"\", [sname]),\n\t_pf_sfnne_fix, _pf_sfnne_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) in _pf_sfnne_types\n\tnot _pf_sfnlib_has(st, \"Next\")\n\tobject.get(st, \"End\", false) != true\n}\n"
|
|
2864
|
+
},
|
|
2865
|
+
{
|
|
2866
|
+
"id": "pf-sfn-asl-numeric-ranges",
|
|
2867
|
+
"service": "stepfunctions",
|
|
2868
|
+
"severity": "ERROR",
|
|
2869
|
+
"title": "ASL numeric fields have service-side ranges the schema does not carry: TimeoutSeconds/HeartbeatSeconds 1..99999999, Wait Seconds 0..99999999, MaxConcurrency >= 0, ToleratedFailurePercentage <= 100, Retry MaxAttempts 0..99999999, BackoffRate >= 1.0, MaxDelaySeconds 1..31622400, and integers must be numbers",
|
|
2870
|
+
"upstream": "none",
|
|
2871
|
+
"resourceTypes": [
|
|
2872
|
+
"AWS::StepFunctions::StateMachine"
|
|
2873
|
+
],
|
|
2874
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnnum_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-task.html\"\n\n_pf_sfnnum_fix := \"Use a value inside the documented range (JSONata states may use a {% %} expression instead)\"\n\n# Measured with ValidateStateMachineDefinition on 2026-09-05. Retry\n# IntervalSeconds 0 and the top-level TimeoutSeconds 0 are accepted, so they\n# are deliberately absent here.\n_pf_sfnnum_min contains [\"TimeoutSeconds\", 1]\n\n_pf_sfnnum_min contains [\"HeartbeatSeconds\", 1]\n\n_pf_sfnnum_min contains [\"Seconds\", 0]\n\n_pf_sfnnum_min contains [\"MaxConcurrency\", 0]\n\n_pf_sfnnum_max contains [\"TimeoutSeconds\", 99999999]\n\n_pf_sfnnum_max contains [\"HeartbeatSeconds\", 99999999]\n\n_pf_sfnnum_max contains [\"Seconds\", 99999999]\n\n_pf_sfnnum_max contains [\"ToleratedFailurePercentage\", 100]\n\n_pf_sfnnum_rmin contains [\"MaxAttempts\", 0]\n\n_pf_sfnnum_rmin contains [\"BackoffRate\", 1]\n\n_pf_sfnnum_rmin contains [\"MaxDelaySeconds\", 1]\n\n_pf_sfnnum_rmax contains [\"MaxAttempts\", 99999999]\n\n_pf_sfnnum_rmax contains [\"MaxDelaySeconds\", 31622400]\n\n_pf_sfnnum_int := {\"TimeoutSeconds\", \"HeartbeatSeconds\", \"Seconds\", \"MaxConcurrency\", \"ToleratedFailurePercentage\", \"ToleratedFailureCount\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s is %v, below the minimum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Minimum value is %v\\\"\", [sname, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome [f, m] in _pf_sfnnum_min\n\tv := object.get(st, f, null)\n\tis_number(v)\n\tv < m\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s is %v, above the maximum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Maximum value is %v\\\"\", [sname, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome [f, m] in _pf_sfnnum_max\n\tv := object.get(st, f, null)\n\tis_number(v)\n\tv > m\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s is the string '%s'; the field takes an integer (or a {%% %%} JSONata expression), and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Expected value of type Integer\\\"\", [sname, f, v]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in _pf_sfnnum_int\n\tv := object.get(st, f, null)\n\tis_string(v)\n\tnot startswith(v, \"{%\")\n\tnot contains(v, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.Retry[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, f]),\n\tsprintf(\"state '%s' Retry[%d] %s is %v, below the minimum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Minimum value is %v\\\"\", [sname, i, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Retry\", [])\n\tis_array(arr)\n\tsome i, r in arr\n\tis_object(r)\n\tsome [f, m] in _pf_sfnnum_rmin\n\tv := object.get(r, f, null)\n\tis_number(v)\n\tv < m\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.Retry[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, f]),\n\tsprintf(\"state '%s' Retry[%d] %s is %v, above the maximum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Maximum value is %v\\\"\", [sname, i, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Retry\", [])\n\tis_array(arr)\n\tsome i, r in arr\n\tis_object(r)\n\tsome [f, m] in _pf_sfnnum_rmax\n\tv := object.get(r, f, null)\n\tis_number(v)\n\tv > m\n}\n"
|
|
2875
|
+
},
|
|
2876
|
+
{
|
|
2877
|
+
"id": "pf-sfn-asl-path-exclusive",
|
|
2878
|
+
"service": "stepfunctions",
|
|
2879
|
+
"severity": "ERROR",
|
|
2880
|
+
"title": "A static ASL field and its Path variant are mutually exclusive (TimeoutSeconds/TimeoutSecondsPath, HeartbeatSeconds/HeartbeatSecondsPath, MaxConcurrency/MaxConcurrencyPath, ToleratedFailurePercentage/-Path, Error/ErrorPath, Cause/CausePath), and a Map state has exactly one of ItemProcessor / Iterator",
|
|
2881
|
+
"upstream": "none",
|
|
2882
|
+
"resourceTypes": [
|
|
2883
|
+
"AWS::StepFunctions::StateMachine"
|
|
2884
|
+
],
|
|
2885
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnpx_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-task.html\"\n\n_pf_sfnpx_fix := \"Keep either the static field or its Path variant; give a Map state one ItemProcessor (Iterator is the legacy spelling)\"\n\n_pf_sfnpx_pair contains [\"TimeoutSeconds\", \"TimeoutSecondsPath\"]\n\n_pf_sfnpx_pair contains [\"HeartbeatSeconds\", \"HeartbeatSecondsPath\"]\n\n_pf_sfnpx_pair contains [\"MaxConcurrency\", \"MaxConcurrencyPath\"]\n\n_pf_sfnpx_pair contains [\"ToleratedFailurePercentage\", \"ToleratedFailurePercentagePath\"]\n\n_pf_sfnpx_pair contains [\"Error\", \"ErrorPath\"]\n\n_pf_sfnpx_pair contains [\"Cause\", \"CausePath\"]\n\n_pf_sfnpx_pair contains [\"ItemProcessor\", \"Iterator\"]\n\nviolation contains make_diag_full(\"pf-sfn-asl-path-exclusive\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), b]),\n\tsprintf(\"state '%s' sets both %s and %s; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [%s, %s]\\\"\", [sname, a, b, a, b]),\n\t_pf_sfnpx_fix, _pf_sfnpx_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome [a, b] in _pf_sfnpx_pair\n\t_pf_sfnlib_has(st, a)\n\t_pf_sfnlib_has(st, b)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-path-exclusive\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Map state '%s' has neither ItemProcessor nor Iterator; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: This object should have only one of the following fields: [ItemProcessor, Iterator]\\\"\", [sname]),\n\t_pf_sfnpx_fix, _pf_sfnpx_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Map\"\n\tnot _pf_sfnlib_has(st, \"ItemProcessor\")\n\tnot _pf_sfnlib_has(st, \"Iterator\")\n}\n"
|
|
2886
|
+
},
|
|
2887
|
+
{
|
|
2888
|
+
"id": "pf-sfn-asl-query-language",
|
|
2889
|
+
"service": "stepfunctions",
|
|
2890
|
+
"severity": "ERROR",
|
|
2891
|
+
"title": "JSONPath-only fields (InputPath, OutputPath, ResultPath, Parameters, ResultSelector, Result, *Path, Variable rules) and JSONata-only fields (Arguments, Output, Items, Condition) must match the effective QueryLanguage; a JSONata state machine cannot contain JSONPath states; {% must close with %}",
|
|
2892
|
+
"upstream": "none",
|
|
2893
|
+
"resourceTypes": [
|
|
2894
|
+
"AWS::StepFunctions::StateMachine"
|
|
2895
|
+
],
|
|
2896
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnql_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/transforming-data.html\"\n\n_pf_sfnql_fix := \"Use Arguments/Output/Items/Condition in JSONata states and the Path-style fields in JSONPath states; set QueryLanguage consistently\"\n\n_pf_sfnql_pathonly := {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"ResultSelector\", \"Result\", \"ItemsPath\", \"TimeoutSecondsPath\", \"HeartbeatSecondsPath\", \"SecondsPath\", \"TimestampPath\", \"MaxConcurrencyPath\", \"ToleratedFailurePercentagePath\", \"ToleratedFailureCountPath\", \"ErrorPath\", \"CausePath\"}\n\n_pf_sfnql_jsonataonly := {\"Arguments\", \"Output\", \"Items\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' uses JSONata but has the JSONPath-only field '%s'; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The QueryLanguage is set to 'JSONata', but field '%s' is only supported for the 'JSONPath' QueryLanguage\\\"\", [sname, f, f]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, _ in st\n\tf in _pf_sfnql_pathonly\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' uses JSONPath but has the JSONata-only field '%s'; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The QueryLanguage is set to 'JSONPath', but field '%s' is only supported for the 'JSONata' QueryLanguage\\\"\", [sname, f, f]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONPath\"\n\tsome f, _ in st\n\tf in _pf_sfnql_jsonataonly\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d uses Variable/comparison fields in a JSONata state; JSONata rules take Condition, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: ... field 'Variable' is only supported for the 'JSONPath' QueryLanguage\\\"\", [sname, i]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tst := s[sname]\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\t_pf_sfnlib_has(c, \"Variable\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d uses Condition in a JSONPath state; JSONPath rules take Variable plus a comparison, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: ... field 'Condition' is only supported for the 'JSONata' QueryLanguage\\\"\", [sname, i]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tst := s[sname]\n\t_pf_sfnlib_ql(name, st) == \"JSONPath\"\n\t_pf_sfnlib_has(c, \"Condition\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.QueryLanguage\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"state '%s' sets QueryLanguage JSONPath inside a state machine whose top-level QueryLanguage is JSONata; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: 'QueryLanguage' can not be 'JSONPath' if set to 'JSONata' for whole state machine\\\"\", [sname]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null) == \"JSONata\"\n\tobject.get(st, \"QueryLanguage\", null) == \"JSONPath\"\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.QueryLanguage\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"state '%s' QueryLanguage '%s' is not JSONPath or JSONata; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [JSONPath, JSONata]\\\"\", [sname, q]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tq := object.get(st, \"QueryLanguage\", null)\n\tis_string(q)\n\tnot q in {\"JSONPath\", \"JSONata\"}\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.QueryLanguage\", [_pf_sfnlib_prop(name)]),\n\tsprintf(\"top-level QueryLanguage '%s' is not JSONPath or JSONata; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [JSONPath, JSONata]\\\"\", [q]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tq := object.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null)\n\tis_string(q)\n\tnot q in {\"JSONPath\", \"JSONata\"}\n}\n\n# String values of a JSONata state, up to two levels inside object/array\n# fields (Arguments, Output, Assign, ItemSelector, Choices[].Condition ...).\n_pf_sfnql_str contains [name, p, sname, where, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, v in st\n\tis_string(v)\n\twhere := f\n}\n\n# Iterating a scalar with `some .. in` is a hard evaluation error in this\n# engine (not undefined), so every nested value is type-guarded first.\n_pf_sfnql_coll(x) if is_object(x)\n\n_pf_sfnql_coll(x) if is_array(x)\n\n_pf_sfnql_str contains [name, p, sname, where, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, o in st\n\t_pf_sfnql_coll(o)\n\tsome k, v in o\n\tis_string(v)\n\twhere := sprintf(\"%s.%v\", [f, k])\n}\n\n_pf_sfnql_str contains [name, p, sname, where, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, o in st\n\t_pf_sfnql_coll(o)\n\tsome k, o2 in o\n\t_pf_sfnql_coll(o2)\n\tsome k2, v in o2\n\tis_string(v)\n\twhere := sprintf(\"%s.%v.%v\", [f, k, k2])\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), where]),\n\tsprintf(\"state '%s' %s value '%s' opens a JSONata expression with {%% but does not close it with %%}; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: JSONata string must start with {%% and end with %%}\\\"\", [sname, where, v]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, sname, where, v] in _pf_sfnql_str\n\tstartswith(v, \"{%\")\n\tnot endswith(v, \"%}\")\n}\n"
|
|
2897
|
+
},
|
|
2898
|
+
{
|
|
2899
|
+
"id": "pf-sfn-asl-resource-arn",
|
|
2900
|
+
"service": "stepfunctions",
|
|
2901
|
+
"severity": "ERROR",
|
|
2902
|
+
"title": "Task Resource is an ARN, and an integration pattern the service does not offer fails creation: .sync on Lambda/SNS/SQS/DynamoDB/EventBridge/API Gateway/aws-sdk, .waitForTaskToken on Athena/Batch/CodeBuild/EMR/Glue/DataBrew/MediaConvert/SageMaker/DynamoDB, and .sync:2 anywhere but states:startExecution",
|
|
2903
|
+
"upstream": "none",
|
|
2904
|
+
"resourceTypes": [
|
|
2905
|
+
"AWS::StepFunctions::StateMachine"
|
|
2906
|
+
],
|
|
2907
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnres_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/integrate-optimized.html\"\n\n_pf_sfnres_fix := \"Use the integration pattern the service supports (see the optimized integrations table); a Lambda call waits for the function anyway (no .sync)\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' Resource '%s' is not an ARN; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value is not a valid resource ARN\\\"\", [sname, res]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Task\"\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tnot contains(res, \"${\")\n\tnot startswith(res, \"arn:\")\n}\n\n# Services whose optimized integration never offers the pattern (doc table,\n# confirmed with ValidateStateMachineDefinition on 2026-09-05). Support on the\n# positive side is per API, so only the impossible combinations are judged.\n_pf_sfnres_nosync := {\"lambda\", \"sns\", \"sqs\", \"dynamodb\", \"events\", \"apigateway\", \"aws-sdk\", \"bedrock-agentcore\"}\n\n_pf_sfnres_notoken := {\"athena\", \"batch\", \"codebuild\", \"elasticmapreduce\", \"emr-containers\", \"emr-serverless\", \"glue\", \"databrew\", \"mediaconvert\", \"sagemaker\", \"dynamodb\", \"bedrock-agentcore\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' uses the .sync (Run a Job) pattern on the %s integration, which does not support it; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The resource provided arn:aws:states:::%s:%s is not recognized\\\"\", [sname, svc, svc, api]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tsvc in _pf_sfnres_nosync\n\tregex.match(\"[.]sync(:2)?$\", api)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' uses the .waitForTaskToken (callback) pattern on the %s integration, which does not support it; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The resource provided arn:aws:states:::%s:%s is not recognized\\\"\", [sname, svc, svc, api]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tsvc in _pf_sfnres_notoken\n\tendswith(api, \".waitForTaskToken\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' uses .sync:2 on %s:%s; only states:startExecution.sync:2 exists, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The resource provided ... is not recognized\\\"\", [sname, svc, api]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tendswith(api, \".sync:2\")\n\tsvc != \"states\"\n}\n"
|
|
2908
|
+
},
|
|
2909
|
+
{
|
|
2910
|
+
"id": "pf-sfn-asl-retry-catch",
|
|
2911
|
+
"service": "stepfunctions",
|
|
2912
|
+
"severity": "ERROR",
|
|
2913
|
+
"title": "Retry/Catch entries: ErrorEquals is present and non-empty, States.ALL appears alone and only in the last entry, every Catch has Next, and JitterStrategy is NONE or FULL",
|
|
2914
|
+
"upstream": "none",
|
|
2915
|
+
"resourceTypes": [
|
|
2916
|
+
"AWS::StepFunctions::StateMachine"
|
|
2917
|
+
],
|
|
2918
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnrc_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html\"\n\n_pf_sfnrc_fix := \"Move the States.ALL catch-all to the last entry by itself; give every catcher a Next\"\n\n# [name, path, state name, field, index, entry, entries count]\n_pf_sfnrc_entry contains [name, p, sname, field, i, e, n] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome field in [\"Retry\", \"Catch\"]\n\tarr := object.get(st, field, null)\n\tis_array(arr)\n\tn := count(arr)\n\tsome i, e in arr\n\tis_object(e)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d]\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] has no ErrorEquals; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [ErrorEquals]\\\"\", [sname, field, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tnot _pf_sfnlib_has(e, \"ErrorEquals\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d].ErrorEquals\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] has an empty ErrorEquals; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value cannot be empty\\\"\", [sname, field, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tee := object.get(e, \"ErrorEquals\", null)\n\tis_array(ee)\n\tcount(ee) == 0\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d].ErrorEquals\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] lists States.ALL together with other error names; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: States.ALL must appear alone and at end of list\\\"\", [sname, field, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tee := object.get(e, \"ErrorEquals\", null)\n\tis_array(ee)\n\t\"States.ALL\" in ee\n\tcount(ee) > 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d].ErrorEquals\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] catches States.ALL but is not the last entry (%d entries); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: States.ALL must appear alone and at end of list\\\"\", [sname, field, i, n]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, n] in _pf_sfnrc_entry\n\tee := object.get(e, \"ErrorEquals\", null)\n\tis_array(ee)\n\t\"States.ALL\" in ee\n\ti < n - 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.Catch[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"state '%s' Catch[%d] has no Next; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [Next]\\\"\", [sname, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tfield == \"Catch\"\n\tnot _pf_sfnlib_has(e, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.Retry[%d].JitterStrategy\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"state '%s' Retry[%d] JitterStrategy '%s' is not NONE or FULL; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [NONE, FULL]\\\"\", [sname, i, j]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tfield == \"Retry\"\n\tj := object.get(e, \"JitterStrategy\", null)\n\tis_string(j)\n\tnot j in {\"NONE\", \"FULL\"}\n}\n"
|
|
2919
|
+
},
|
|
2920
|
+
{
|
|
2921
|
+
"id": "pf-sfn-asl-state-fields",
|
|
2922
|
+
"service": "stepfunctions",
|
|
2923
|
+
"severity": "ERROR",
|
|
2924
|
+
"title": "ASL fields are per state type: a known field placed on a type that does not accept it (Retry on Pass, End on Choice, Next on Fail, ...) fails creation",
|
|
2925
|
+
"upstream": "none",
|
|
2926
|
+
"resourceTypes": [
|
|
2927
|
+
"AWS::StepFunctions::StateMachine"
|
|
2928
|
+
],
|
|
2929
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnfld_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnfld_fix := \"Remove the field or move the logic to a state type that supports it (see the ASL state pages)\"\n\n# Measured with ValidateStateMachineDefinition on 2026-09-05 (8 types x 50\n# fields). Type/Comment/QueryLanguage are accepted everywhere.\n_pf_sfnfld_common := {\"Type\", \"Comment\", \"QueryLanguage\"}\n\n_pf_sfnfld_allowed := {\n\t\"Pass\": {\"InputPath\", \"OutputPath\", \"Result\", \"ResultPath\", \"Parameters\", \"Output\", \"Assign\", \"Next\", \"End\"},\n\t\"Task\": {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"Arguments\", \"Output\", \"Assign\", \"Resource\", \"Credentials\", \"ResultSelector\", \"Retry\", \"Catch\", \"TimeoutSeconds\", \"TimeoutSecondsPath\", \"HeartbeatSeconds\", \"HeartbeatSecondsPath\", \"Next\", \"End\"},\n\t\"Wait\": {\"InputPath\", \"OutputPath\", \"Output\", \"Assign\", \"Seconds\", \"Timestamp\", \"SecondsPath\", \"TimestampPath\", \"Next\", \"End\"},\n\t\"Parallel\": {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"Arguments\", \"Output\", \"Assign\", \"ResultSelector\", \"Retry\", \"Catch\", \"Branches\", \"Next\", \"End\"},\n\t\"Map\": {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"Output\", \"Assign\", \"ResultSelector\", \"Retry\", \"Catch\", \"ItemProcessor\", \"Iterator\", \"ItemsPath\", \"Items\", \"ItemSelector\", \"ItemReader\", \"ItemBatcher\", \"ResultWriter\", \"MaxConcurrency\", \"MaxConcurrencyPath\", \"ToleratedFailurePercentage\", \"ToleratedFailurePercentagePath\", \"ToleratedFailureCount\", \"ToleratedFailureCountPath\", \"Label\", \"Next\", \"End\"},\n\t\"Choice\": {\"InputPath\", \"OutputPath\", \"Output\", \"Assign\", \"Choices\", \"Default\"},\n\t\"Succeed\": {\"InputPath\", \"OutputPath\", \"Output\"},\n\t\"Fail\": {\"Error\", \"Cause\", \"ErrorPath\", \"CausePath\"},\n}\n\n_pf_sfnfld_known := {f | some _, fs in _pf_sfnfld_allowed; some f in fs} | _pf_sfnfld_common\n\n# ponytail: only fields the service already knows are judged; a field that no\n# type accepts is left alone because it may be a newer ASL feature rather than\n# a typo (a false positive here would block valid deploys). Case variants of a\n# known field (ASL is case-sensitive) are judged too.\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' (Type %s) has field '%s', which Step Functions does not accept on that state type; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field '%s' is not supported\\\"\", [sname, t, f, f]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tt := object.get(st, \"Type\", null)\n\tallowed := _pf_sfnfld_allowed[t]\n\tsome f, _ in st\n\tnot f in _pf_sfnfld_common\n\tnot f in allowed\n\tf in _pf_sfnfld_known\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' has field '%s'; ASL field names are case-sensitive (did you mean '%s'?), and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field '%s' is not supported\\\"\", [sname, f, k, f]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f, _ in st\n\tnot f in _pf_sfnfld_known\n\tsome k in _pf_sfnfld_known\n\tlower(k) == lower(f)\n}\n\n_pf_sfnfld_top := {\"Comment\", \"QueryLanguage\", \"StartAt\", \"TimeoutSeconds\", \"Version\", \"States\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_prop(name), f]),\n\tsprintf(\"top-level field '%s' is not an ASL field (did you mean '%s'?); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field '%s' is not supported\\\"\", [f, k, f]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfnlib_asl(name)\n\tsome f, _ in asl\n\tnot f in _pf_sfnfld_top\n\tsome k in _pf_sfnfld_top\n\tlower(k) == lower(f)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.Version\", [_pf_sfnlib_prop(name)]),\n\tsprintf(\"ASL Version '%s' is not supported; the only accepted value is \\\"1.0\\\" (CreateStateMachine: \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [1.0]\\\")\", [v]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tv := object.get(_pf_sfnlib_asl(name), \"Version\", null)\n\tis_string(v)\n\tv != \"1.0\"\n}\n"
|
|
2930
|
+
},
|
|
2931
|
+
{
|
|
2932
|
+
"id": "pf-sfn-asl-terminal-state",
|
|
2933
|
+
"service": "stepfunctions",
|
|
2934
|
+
"severity": "ERROR",
|
|
2935
|
+
"title": "An ASL state machine needs at least one terminal state (End: true, Succeed or Fail) at the top level",
|
|
2936
|
+
"upstream": "none",
|
|
2937
|
+
"resourceTypes": [
|
|
2938
|
+
"AWS::StepFunctions::StateMachine"
|
|
2939
|
+
],
|
|
2940
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnterm_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnterm_fix := \"Mark the last state with End: true or end with a Succeed/Fail state\"\n\n_pf_sfnterm_ok(name) if {\n\tsome [n, p, s, _] in _pf_sfnlib_scopes\n\tn == name\n\tp == \"States\"\n\tsome _, st in s\n\tis_object(st)\n\tobject.get(st, \"End\", false) == true\n}\n\n_pf_sfnterm_ok(name) if {\n\tsome [n, p, s, _] in _pf_sfnlib_scopes\n\tn == name\n\tp == \"States\"\n\tsome _, st in s\n\tis_object(st)\n\tobject.get(st, \"Type\", null) in {\"Succeed\", \"Fail\"}\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-terminal-state\", \"ERROR\", name,\n\tsprintf(\"%s.States\", [_pf_sfnlib_prop(name)]),\n\t\"no top-level state is terminal (End: true, Succeed or Fail); CreateStateMachine fails with \\\"MISSING_END_STATE: Workflow has no terminal state\\\"\",\n\t_pf_sfnterm_fix, _pf_sfnterm_url) if {\n\tsome [name, p, s, _] in _pf_sfnlib_scopes\n\tp == \"States\"\n\tnot _pf_sfnterm_ok(name)\n}\n"
|
|
2941
|
+
},
|
|
2942
|
+
{
|
|
2943
|
+
"id": "pf-sfn-asl-unreachable-state",
|
|
2944
|
+
"service": "stepfunctions",
|
|
2945
|
+
"severity": "ERROR",
|
|
2946
|
+
"title": "Every ASL state must be reachable: a state that is not StartAt and that no other state transitions to fails creation",
|
|
2947
|
+
"upstream": "none",
|
|
2948
|
+
"resourceTypes": [
|
|
2949
|
+
"AWS::StepFunctions::StateMachine"
|
|
2950
|
+
],
|
|
2951
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnunr_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnunr_fix := \"Transition to the state from another state (Next/Default/Choices/Catch) or remove it\"\n\n# [name, scope path, from state, target state]\n_pf_sfnunr_edge contains [name, p, sname, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"Next\", \"Default\"]\n\ttarget := object.get(st, key, null)\n\tis_string(target)\n}\n\n_pf_sfnunr_edge contains [name, p, sname, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome field in [\"Choices\", \"Catch\"]\n\tarr := object.get(st, field, [])\n\tis_array(arr)\n\tsome c in arr\n\tis_object(c)\n\ttarget := object.get(c, \"Next\", null)\n\tis_string(target)\n}\n\n_pf_sfnunr_in(name, p, t) if {\n\tsome [n2, p2, from, t2] in _pf_sfnunr_edge\n\tn2 == name\n\tp2 == p\n\tt2 == t\n\tfrom != t\n}\n\n# ponytail: sound subset of the service's reachability check — a state with no\n# incoming edge from another state is certainly unreachable, but a cycle of\n# orphans passes (needs graph.reachable, which the engine lacks). A dangling\n# StartAt is left to engine rule E3601.\nviolation contains make_diag_full(\"pf-sfn-asl-unreachable-state\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state '%s' is not reachable: it is not the StartAt ('%s') and no other state in its States block transitions to it; CreateStateMachine fails with \\\"MISSING_TRANSITION_TARGET: State \\\\\\\"%s\\\\\\\" is not reachable.\\\"\", [sname, sa, sname]),\n\t_pf_sfnunr_fix, _pf_sfnunr_url) if {\n\tsome [name, p, s, sa] in _pf_sfnlib_scopes\n\tis_string(sa)\n\tsa in object.keys(s)\n\tsome sname, st in s\n\tis_object(st)\n\tsname != sa\n\tnot _pf_sfnunr_in(name, p, sname)\n}\n"
|
|
2952
|
+
},
|
|
2953
|
+
{
|
|
2954
|
+
"id": "pf-sfn-asl-wait-timing",
|
|
2955
|
+
"service": "stepfunctions",
|
|
2956
|
+
"severity": "ERROR",
|
|
2957
|
+
"title": "A Wait state carries exactly one of Seconds / Timestamp / SecondsPath / TimestampPath, and a literal Timestamp is RFC3339 with T and Z (all four absent is covered by engine rule E3601)",
|
|
2958
|
+
"upstream": "none",
|
|
2959
|
+
"resourceTypes": [
|
|
2960
|
+
"AWS::StepFunctions::StateMachine"
|
|
2961
|
+
],
|
|
2962
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnwait_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-wait.html\"\n\n_pf_sfnwait_fix := \"Keep one timing field; write Timestamp as 2030-01-01T00:00:00Z\"\n\n_pf_sfnwait_fields := {\"Seconds\", \"Timestamp\", \"SecondsPath\", \"TimestampPath\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-wait-timing\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Wait state '%s' sets %d of Seconds/Timestamp/SecondsPath/TimestampPath; exactly one is allowed, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [SecondsPath, Seconds, TimestampPath, Timestamp]\\\"\", [sname, n]),\n\t_pf_sfnwait_fix, _pf_sfnwait_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Wait\"\n\tn := count({k | some k, _ in st; k in _pf_sfnwait_fields})\n\tn > 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-wait-timing\", \"ERROR\", name,\n\tsprintf(\"%s.Timestamp\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Wait state '%s' Timestamp '%s' is not an RFC3339 timestamp with an uppercase T separator and Z suffix; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: String does not match RFC3339 timestamp\\\"\", [sname, ts]),\n\t_pf_sfnwait_fix, _pf_sfnwait_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Wait\"\n\tts := object.get(st, \"Timestamp\", null)\n\tis_string(ts)\n\tnot startswith(ts, \"{%\")\n\tnot regex.match(\"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]+)?Z$\", ts)\n}\n"
|
|
2963
|
+
},
|
|
2964
|
+
{
|
|
2965
|
+
"id": "pf-sfn-definition-exactly-one",
|
|
2966
|
+
"service": "stepfunctions",
|
|
2967
|
+
"severity": "ERROR",
|
|
2968
|
+
"title": "A state machine carries exactly one of Definition, DefinitionString or DefinitionS3Location",
|
|
2969
|
+
"upstream": "none",
|
|
2970
|
+
"resourceTypes": [
|
|
2971
|
+
"AWS::StepFunctions::StateMachine"
|
|
2972
|
+
],
|
|
2973
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfndef_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-stepfunctions-statemachine.html\"\n\n_pf_sfndef_fix := \"Keep one of Definition / DefinitionString / DefinitionS3Location\"\n\nviolation contains make_diag_full(\"pf-sfn-definition-exactly-one\", \"ERROR\", name,\n\t\"Properties\",\n\tsprintf(\"%d of Definition / DefinitionString / DefinitionS3Location are set; exactly one is required, and the resource handler fails with \\\"Property validation failed. Please use one of [DefinitionS3Location], [DefinitionString] or [Definition].\\\"\", [n]),\n\t_pf_sfndef_fix, _pf_sfndef_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tn := count({k | some k in [\"Definition\", \"DefinitionString\", \"DefinitionS3Location\"]; _pf_sfnlib_has(props, k)})\n\tn != 1\n}\n"
|
|
2974
|
+
},
|
|
2975
|
+
{
|
|
2976
|
+
"id": "pf-sfn-encryption-config",
|
|
2977
|
+
"service": "stepfunctions",
|
|
2978
|
+
"severity": "ERROR",
|
|
2979
|
+
"title": "EncryptionConfiguration: CUSTOMER_MANAGED_KMS_KEY requires KmsKeyId, and AWS_OWNED_KEY rejects KmsKeyId and KmsDataKeyReusePeriodSeconds (state machines and activities)",
|
|
2980
|
+
"upstream": "none",
|
|
2981
|
+
"resourceTypes": [
|
|
2982
|
+
"AWS::StepFunctions::StateMachine",
|
|
2983
|
+
"AWS::StepFunctions::Activity"
|
|
2984
|
+
],
|
|
2985
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnenc_url := \"https://docs.aws.amazon.com/step-functions/latest/apireference/API_EncryptionConfiguration.html\"\n\n_pf_sfnenc_fix := \"Pair CUSTOMER_MANAGED_KMS_KEY with a KmsKeyId; leave KmsKeyId/KmsDataKeyReusePeriodSeconds out for AWS_OWNED_KEY\"\n\n_pf_sfnenc_res contains [name, enc, t] if {\n\tsome rt in [\"AWS::StepFunctions::StateMachine\", \"AWS::StepFunctions::Activity\"]\n\tsome name in resources_of_type(rt)\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tenc := object.get(props, \"EncryptionConfiguration\", null)\n\tis_object(enc)\n\tt := resolve(name, \"Properties.EncryptionConfiguration.Type\")\n\tis_string(t)\n}\n\nviolation contains make_diag_full(\"pf-sfn-encryption-config\", \"ERROR\", name,\n\t\"Properties.EncryptionConfiguration\",\n\t\"EncryptionConfiguration.Type is CUSTOMER_MANAGED_KMS_KEY without a KmsKeyId; the create call fails with \\\"InvalidEncryptionConfiguration: Must set a valid kmsKeyId.\\\"\",\n\t_pf_sfnenc_fix, _pf_sfnenc_url) if {\n\tsome [name, enc, t] in _pf_sfnenc_res\n\tt == \"CUSTOMER_MANAGED_KMS_KEY\"\n\tnot _pf_sfnlib_has(enc, \"KmsKeyId\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-encryption-config\", \"ERROR\", name,\n\tsprintf(\"Properties.EncryptionConfiguration.%s\", [f]),\n\tsprintf(\"EncryptionConfiguration.Type is AWS_OWNED_KEY but %s is set; the create call fails with \\\"InvalidEncryptionConfiguration: Custom %s is not allowed when selecting AWS_OWNED_KEY.\\\"\", [f, lc]),\n\t_pf_sfnenc_fix, _pf_sfnenc_url) if {\n\tsome [name, enc, t] in _pf_sfnenc_res\n\tt == \"AWS_OWNED_KEY\"\n\tsome [f, lc] in _pf_sfnenc_owned\n\t_pf_sfnlib_has(enc, f)\n}\n\n_pf_sfnenc_owned contains [\"KmsKeyId\", \"kmsKeyId\"]\n\n_pf_sfnenc_owned contains [\"KmsDataKeyReusePeriodSeconds\", \"kmsDataKeyReusePeriodSeconds\"]\n"
|
|
2986
|
+
},
|
|
2987
|
+
{
|
|
2988
|
+
"id": "pf-sfn-express-unsupported",
|
|
2989
|
+
"service": "stepfunctions",
|
|
2990
|
+
"severity": "ERROR",
|
|
2991
|
+
"title": "An EXPRESS state machine cannot use .sync / .waitForTaskToken integrations, Activity resources, or Distributed Map (at any nesting level)",
|
|
2992
|
+
"upstream": "none",
|
|
2993
|
+
"resourceTypes": [
|
|
2994
|
+
"AWS::StepFunctions::StateMachine"
|
|
2995
|
+
],
|
|
2996
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnex_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/choosing-workflow-type.html\"\n\n_pf_sfnex_fix := \"Switch the state machine to STANDARD, or use Request-Response integrations and Inline Map in the Express workflow\"\n\nviolation contains make_diag_full(\"pf-sfn-express-unsupported\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"EXPRESS state machine: Task state '%s' Resource '%s' uses a %s integration pattern; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Express state machine does not support '%s' service integration\\\"\", [sname, res, pat, pat]),\n\t_pf_sfnex_fix, _pf_sfnex_url) if {\n\t_pf_sfnlib_type(name) == \"EXPRESS\"\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Task\"\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tsome pat in [\".sync\", \".waitForTaskToken\"]\n\tregex.match(sprintf(\"[%s](:2)?$\", [pat]), res)\n}\n\nviolation contains make_diag_full(\"pf-sfn-express-unsupported\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"EXPRESS state machine: Task state '%s' targets an Activity; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Express state machine does not support Activity ARN\\\"\", [sname]),\n\t_pf_sfnex_fix, _pf_sfnex_url) if {\n\t_pf_sfnlib_type(name) == \"EXPRESS\"\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tregex.match(\"^arn:[^:]+:states:[^:]+:[^:]+:activity:\", res)\n}\n\nviolation contains make_diag_full(\"pf-sfn-express-unsupported\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig.Mode\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"EXPRESS state machine: Map state '%s' runs in DISTRIBUTED mode; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'Mode' with value 'DISTRIBUTED' is not supported inside 'EXPRESS' state machines\\\"\", [sname]),\n\t_pf_sfnex_fix, _pf_sfnex_url) if {\n\t_pf_sfnlib_type(name) == \"EXPRESS\"\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\tproc := object.get(st, key, null)\n\tis_object(proc)\n\tobject.get(object.get(proc, \"ProcessorConfig\", {}), \"Mode\", null) == \"DISTRIBUTED\"\n}\n"
|
|
2997
|
+
},
|
|
2998
|
+
{
|
|
2999
|
+
"id": "pf-sfn-kms-key-region",
|
|
3000
|
+
"service": "stepfunctions",
|
|
3001
|
+
"severity": "ERROR",
|
|
3002
|
+
"title": "EncryptionConfiguration.KmsKeyId must be a key in the deploy region (state machines and activities)",
|
|
3003
|
+
"upstream": "none",
|
|
3004
|
+
"resourceTypes": [
|
|
3005
|
+
"AWS::StepFunctions::StateMachine",
|
|
3006
|
+
"AWS::StepFunctions::Activity"
|
|
3007
|
+
],
|
|
3008
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnkms_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/encryption-at-rest.html\"\n\n_pf_sfnkms_fix := \"Use a KMS key created in the same region as the state machine (Fn::GetAtt Key.Arn of a key in this stack)\"\n\n# Region comparison needs the deploy region, which only this pack sees\n# (data.cdk_preflight.deploy_region is defined in enforce mode; the rule\n# skips without it).\nviolation contains make_diag_full(\"pf-sfn-kms-key-region\", \"ERROR\", name,\n\t\"Properties.EncryptionConfiguration.KmsKeyId\",\n\tsprintf(\"KmsKeyId is a key in '%s' but the deploy region is '%s'; KMS rejects the key at create time with \\\"InvalidEncryptionConfiguration: Invalid arn %s\\\"\", [parts[3], region, parts[3]]),\n\t_pf_sfnkms_fix, _pf_sfnkms_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome rt in [\"AWS::StepFunctions::StateMachine\", \"AWS::StepFunctions::Activity\"]\n\tsome name in resources_of_type(rt)\n\tarn := resolve(name, \"Properties.EncryptionConfiguration.KmsKeyId\")\n\tis_string(arn)\n\tstartswith(arn, \"arn:\")\n\tparts := split(arn, \":\")\n\tcount(parts) >= 6\n\tparts[2] == \"kms\"\n\tparts[3] != \"\"\n\tparts[3] != region\n}\n"
|
|
3009
|
+
},
|
|
3010
|
+
{
|
|
3011
|
+
"id": "pf-sfn-logging-destination",
|
|
3012
|
+
"service": "stepfunctions",
|
|
3013
|
+
"severity": "ERROR",
|
|
3014
|
+
"title": "LoggingConfiguration with Level other than OFF needs exactly one Destinations entry carrying CloudWatchLogsLogGroup.LogGroupArn, and a literal ARN must be a CloudWatch Logs log-group ARN ending in :*",
|
|
2760
3015
|
"upstream": "none",
|
|
2761
3016
|
"resourceTypes": [
|
|
2762
3017
|
"AWS::StepFunctions::StateMachine"
|
|
2763
3018
|
],
|
|
2764
|
-
"rego": "package cdk_preflight\n\nimport rego.v1\n\
|
|
3019
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnlog_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-stepfunctions-statemachine-loggingconfiguration.html\"\n\n_pf_sfnlog_fix := \"Reference the log group with Fn::GetAtt LogGroup.Arn (it already ends in :*) in a single Destinations entry\"\n\n# An empty Destinations array is stopped by the schema (F3032 minItems);\n# the absent-while-enabled and two-entries cases are not.\n_pf_sfnlog_on(name) if {\n\tlvl := resolve(name, \"Properties.LoggingConfiguration.Level\")\n\tis_string(lvl)\n\tlvl != \"OFF\"\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\t\"Properties.LoggingConfiguration.Destinations\",\n\tsprintf(\"LoggingConfiguration has %d Destinations entries while Level is not OFF; exactly one is required, and CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Must specify exactly one Log Destination.\\\"\", [n]),\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\t_pf_sfnlog_on(name)\n\tn := count(flatten_list(name, \"Properties.LoggingConfiguration.Destinations\"))\n\tn != 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\tsprintf(\"Properties.LoggingConfiguration.Destinations.%d\", [d.index]),\n\t\"a Destinations entry has no CloudWatchLogsLogGroup; CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Must set valid CloudWatch Log Group ARN.\\\"\",\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\t_pf_sfnlog_on(name)\n\tsome d in flatten_list(name, \"Properties.LoggingConfiguration.Destinations\")\n\tis_object(d.value)\n\tnot _pf_sfnlib_has(d.value, \"CloudWatchLogsLogGroup\")\n}\n\n_pf_sfnlog_arn contains [name, idx, arn] if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\t_pf_sfnlog_on(name)\n\tsome d in flatten_list(name, \"Properties.LoggingConfiguration.Destinations\")\n\tis_object(d.value)\n\tarn := object.get(object.get(d.value, \"CloudWatchLogsLogGroup\", {}), \"LogGroupArn\", null)\n\tis_string(arn)\n\tstartswith(arn, \"arn:\")\n\tidx := d.index\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\tsprintf(\"Properties.LoggingConfiguration.Destinations.%d.CloudWatchLogsLogGroup.LogGroupArn\", [idx]),\n\tsprintf(\"LogGroupArn '%s' is not a CloudWatch Logs log-group ARN; CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Provided ARN is not CloudWatch Logs Log Group ARN.\\\"\", [arn]),\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome [name, idx, arn] in _pf_sfnlog_arn\n\tnot regex.match(\"^arn:[^:]+:logs:[^:]*:[^:]*:log-group:\", arn)\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\tsprintf(\"Properties.LoggingConfiguration.Destinations.%d.CloudWatchLogsLogGroup.LogGroupArn\", [idx]),\n\tsprintf(\"LogGroupArn '%s' lacks the :* qualifier (Fn::GetAtt LogGroup.Arn includes it); CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Log Group ARN must be provided with '*' qualifier.\\\"\", [arn]),\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome [name, idx, arn] in _pf_sfnlog_arn\n\tregex.match(\"^arn:[^:]+:logs:[^:]*:[^:]*:log-group:\", arn)\n\tnot endswith(arn, \":*\")\n}\n"
|
|
3020
|
+
},
|
|
3021
|
+
{
|
|
3022
|
+
"id": "pf-sfn-logging-name-ascii",
|
|
3023
|
+
"service": "stepfunctions",
|
|
3024
|
+
"severity": "ERROR",
|
|
3025
|
+
"title": "With CloudWatch Logs logging enabled (Level other than OFF) the StateMachineName may only contain 0-9, A-Z, a-z, . - and _ (non-ASCII names are accepted only without logging)",
|
|
3026
|
+
"upstream": "none",
|
|
3027
|
+
"resourceTypes": [
|
|
3028
|
+
"AWS::StepFunctions::StateMachine"
|
|
3029
|
+
],
|
|
3030
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnlogname_url := \"https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html\"\n\n_pf_sfnlogname_fix := \"Rename the state machine to [0-9A-Za-z._-]+ or turn logging off\"\n\n# The name itself accepts non-ASCII characters (measured: 'テスト' creates\n# fine); it is the log delivery resourceId pattern ^[0-9A-Za-z.\\/\\-_:]+$\n# (quoted verbatim from the service error) that rejects it once\n# LoggingConfiguration.Level is not OFF. The class mirrors that pattern; the\n# / and : it admits are already rejected by the name itself (pf-sfn-name-charset).\nviolation contains make_diag_full(\"pf-sfn-logging-name-ascii\", \"ERROR\", name,\n\t\"Properties.StateMachineName\",\n\tsprintf(\"StateMachineName '%s' contains characters outside [0-9A-Za-z._-] while LoggingConfiguration.Level is %s; CreateStateMachine fails with \\\"InvalidLoggingConfiguration: ... Value 'arn:...:stateMachine:%s' at 'resourceId' failed to satisfy constraint: Member must satisfy regular expression pattern\\\"\", [n, lvl, n]),\n\t_pf_sfnlogname_fix, _pf_sfnlogname_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tlvl := resolve(name, \"Properties.LoggingConfiguration.Level\")\n\tis_string(lvl)\n\tlvl != \"OFF\"\n\tn := resolve(name, \"Properties.StateMachineName\")\n\tis_string(n)\n\tnot regex.match(\"^[0-9A-Za-z._:/-]+$\", n)\n}\n"
|
|
3031
|
+
},
|
|
3032
|
+
{
|
|
3033
|
+
"id": "pf-sfn-name-charset",
|
|
3034
|
+
"service": "stepfunctions",
|
|
3035
|
+
"severity": "ERROR",
|
|
3036
|
+
"title": "StateMachineName and Activity Name may not contain whitespace, brackets (< > { } [ ]), wildcards (? *), the special characters \" # % \\ ^ | ~ ` $ & , ; : / or control characters (non-ASCII letters are accepted)",
|
|
3037
|
+
"upstream": "none",
|
|
3038
|
+
"resourceTypes": [
|
|
3039
|
+
"AWS::StepFunctions::StateMachine",
|
|
3040
|
+
"AWS::StepFunctions::Activity"
|
|
3041
|
+
],
|
|
3042
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnname_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/service-quotas.html\"\n\n_pf_sfnname_fix := \"Use letters, digits, - and _ in the name\"\n\n# Measured 2026-09-05: 'my machine', 'a/b' and 'a<b>' are rejected with\n# InvalidName; 'テスト' is accepted (so no ASCII-only check here — see\n# pf-sfn-logging-name-ascii for the logging case). The schema carries only\n# the 80-character maximum (F3033).\n_pf_sfnname_bad := \"[\\\\s<>{}\\\\[\\\\]?*\\\"#%\\\\\\\\^|~`$&,;:/\\\\x00-\\\\x1f\\\\x7f-\\\\x9f]\"\n\n_pf_sfnname_prop contains [\"AWS::StepFunctions::StateMachine\", \"Properties.StateMachineName\"]\n\n_pf_sfnname_prop contains [\"AWS::StepFunctions::Activity\", \"Properties.Name\"]\n\nviolation contains make_diag_full(\"pf-sfn-name-charset\", \"ERROR\", name,\n\tprop,\n\tsprintf(\"name '%s' contains a character Step Functions rejects (whitespace, < > { } [ ] ? * \\\" # %% \\\\ ^ | ~ ` $ & , ; : / or a control character); the create call fails with \\\"InvalidName: Invalid Name: '%s'\\\"\", [n, n]),\n\t_pf_sfnname_fix, _pf_sfnname_url) if {\n\tsome [rt, prop] in _pf_sfnname_prop\n\tsome name in resources_of_type(rt)\n\tn := resolve(name, prop)\n\tis_string(n)\n\tregex.match(_pf_sfnname_bad, n)\n}\n"
|
|
2765
3043
|
},
|
|
2766
3044
|
{
|
|
2767
3045
|
"id": "pf-tags-aws-prefix",
|
|
@@ -2786,4 +3064,11 @@ exports.BUNDLED_RULES = [
|
|
|
2786
3064
|
"rego": "package cdk_preflight\n\nimport rego.v1\n\n# The AWS-wide limit is 50 user tags per resource. Counted on the rendered\n# template, which is the only place the merged Tags.of() result exists.\n_pf_tagcount_bad contains [name, n] if {\n\tsome name in object.keys(input.resources)\n\ttags := flatten_list(name, \"Properties.Tags\")\n\tn := count(tags)\n\tn > 50\n}\n\nviolation contains make_diag_full(\"pf-tags-count-max\", \"ERROR\", name,\n\t\"Properties.Tags\",\n\tsprintf(\"%d tags are attached to this resource; AWS allows at most 50 per resource and rejects the create call (\\\"More than 50 tags specified.\\\")\", [n]),\n\t\"Reduce the tag set to 50 or fewer - remember that Tags.of() adds tags from every enclosing scope\",\n\t\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\") if {\n\tsome [name, n] in _pf_tagcount_bad\n}\n"
|
|
2787
3065
|
}
|
|
2788
3066
|
];
|
|
2789
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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O0tBQ2wyQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgc2NyaXB0cy9idW5kbGUtcnVsZXMudHMgZnJvbSBydWxlcy8qKi4gRG8gbm90IGVkaXQgYnkgaGFuZC5cbi8vIH5+IFJlZ2VuZXJhdGUgd2l0aDogbnB4IHByb2plbiBidW5kbGUtcnVsZXNcbi8qIGVzbGludC1kaXNhYmxlICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZWRSdWxlRGF0YSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgc2V2ZXJpdHk6IHN0cmluZztcbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbiAgcmVhZG9ubHkgdXBzdHJlYW06IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlczogc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlZ286IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJVTkRMRURfUlVMRVM6IEJ1bmRsZWRSdWxlRGF0YVtdID0gW1xuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LWFjY2Vzcy1sb2ctZm9ybWF0LXJlcXVlc3QtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjY2VzcyBsb2cgZm9ybWF0IG11c3QgaW5jbHVkZSBhIHJlcXVlc3QgaWQgdmFyaWFibGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBmb3JtYXQgc3RyaW5nIGlzIG9wYXF1ZSB0byBldmVyeSBzY2hlbWEgbGF5ZXI7IHRoZSBzZXJ2aWNlIHJlcXVpcmVzIGFcXG4jIHJlcXVlc3QgaWQgdmFyaWFibGUgc29tZXdoZXJlIGluc2lkZSBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWFjY2Vzcy1sb2ctZm9ybWF0LXJlcXVlc3QtaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc0xvZ1NldHRpbmcuRm9ybWF0XFxcIixcXG5cXHRcXFwiQWNjZXNzIGxvZyBmb3JtYXQgaGFzIG5vIHJlcXVlc3QgaWQgdmFyaWFibGU7IHRoZSBzdGFnZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBMb2cgZm9ybWF0IG11c3QgaW5jbHVkZSBlaXRoZXIgJGNvbnRleHQucmVxdWVzdElkIG9yICRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgJGNvbnRleHQucmVxdWVzdElkIChvciAkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZCkgdG8gdGhlIGFjY2VzcyBsb2cgZm9ybWF0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NldC11cC1sb2dnaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXFxcIilcXG5cXHRmbXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BY2Nlc3NMb2dTZXR0aW5nLkZvcm1hdFxcXCIpXFxuXFx0aXNfc3RyaW5nKGZtdClcXG5cXHRub3QgY29udGFpbnMoZm10LCBcXFwiJGNvbnRleHQucmVxdWVzdElkXFxcIilcXG5cXHRub3QgY29udGFpbnMoZm10LCBcXFwiJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LWF1dGhvcml6ZXItdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzIHRvcHMgb3V0IGF0IDM2MDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyB0aGUgVFRMIGFzIGEgYmFyZSBpbnRlZ2VyOyB0aGUgMzYwMCBjZWlsaW5nIGlzXFxuIyBvbmx5IGluIHRoZSBzZXJ2aWNlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctYXV0aG9yaXplci10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHMgJXYgaXMgb3ZlciB0aGUgY2FwOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkF1dGhvcml6ZXIgcmVzdWx0IFRUTCBvdXRzaWRlIGFsbG93YWJsZSByYW5nZS4gVFRMIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHMuXFxcXFxcXCJcXFwiLCBbdHRsXSksXFxuXFx0XFxcIlVzZSBhIFRUTCBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHR0dGwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kc1xcXCIpKVxcblxcdHR0bCA+IDM2MDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1jb2duaXRvLWF1dGhvcml6ZXItcHJvdmlkZXItYXJuc1wiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6ZXJzIG5lZWQgUHJvdmlkZXJBUk5zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgQ29nbml0byBhdXRob3JpemVyIHZhbGlkYXRlcyB0b2tlbnMgYWdhaW5zdCB0aGUgdXNlciBwb29scyBsaXN0ZWQgaW5cXG4jIFByb3ZpZGVyQVJOczsgdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuXFxuIyBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGdjcGFfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlByb3ZpZGVyQVJOc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1jb2duaXRvLWF1dGhvcml6ZXItcHJvdmlkZXItYXJuc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlkZXJBUk5zXFxcIixcXG5cXHRcXFwiQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6ZXIgaGFzIG5vIFByb3ZpZGVyQVJOczsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm92aWRlckFSTnMgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUHJvdmlkZXJBUk5zIHRvIHRoZSBDb2duaXRvIHVzZXIgcG9vbCBBUk4ocykgdGhpcyBhdXRob3JpemVyIHNob3VsZCB1c2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNPR05JVE9fVVNFUl9QT09MU1xcXCJcXG5cXHRfcGZfYXBnY3BhX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1kZXBsb3ltZW50LW5vLW1ldGhvZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgRGVwbG95bWVudCBuZWVkcyBhdCBsZWFzdCBvbmUgTWV0aG9kIG9uIGl0cyBSRVNUIEFQSVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZXBsb3lpbmcgYW4gQVBJIHdpdGggemVybyBtZXRob2RzIGZhaWxzLiBKdWRnZWQgb25seSB3aGVuIHRoZSB3aG9sZVxcbiMgcGljdHVyZSBpcyBpbiB0aGlzIHRlbXBsYXRlOiB0aGUgYXBpIGlzIGEgc2libGluZyByZXNvdXJjZSBhbmQgaXQgaGFzIG5vXFxuIyBPcGVuQVBJIGJvZHkgKHdoaWNoIHdvdWxkIGRlZmluZSBtZXRob2RzIGludmlzaWJseSkuIEFic2VuY2UgaXMgcHJvdmVuXFxuIyBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGdkbm1fYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfYXBnZG5tX3NlcnZlZChhcGkpIGlmIHtcXG5cXHRzb21lIG0gaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHRyZXNvbHZlKG0sIFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIpID09IGFwaVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWRlcGxveW1lbnQtbm8tbWV0aG9kc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSRVNUIEFQSSAnJXMnIGhhcyBubyBBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCBpbiB0aGlzIHRlbXBsYXRlOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIFJFU1QgQVBJIGRvZXNuJ3QgY29udGFpbiBhbnkgbWV0aG9kc1xcXFxcXFwiXFxcIiwgW2FwaV0pLFxcblxcdFxcXCJBZGQgYXQgbGVhc3Qgb25lIEFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kIHRvIHRoZSBBUEkgYmVmb3JlIGRlcGxveWluZyBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktZGVwbG95bWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50XFxcIilcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiKVxcblxcdGFwaSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpSZXN0QXBpXFxcIilcXG5cXHRfcGZfYXBnZG5tX2Fic2VudChhcGksIFxcXCJCb2R5XFxcIilcXG5cXHRfcGZfYXBnZG5tX2Fic2VudChhcGksIFxcXCJCb2R5UzNMb2NhdGlvblxcXCIpXFxuXFx0bm90IF9wZl9hcGdkbm1fc2VydmVkKGFwaSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1pbnRlZ3JhdGlvbi1odHRwLW1ldGhvZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm9uLU1PQ0sgaW50ZWdyYXRpb25zIG5lZWQgSW50ZWdyYXRpb25IdHRwTWV0aG9kXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXZlcnkgaW50ZWdyYXRpb24gdHlwZSBleGNlcHQgTU9DSyBjYWxscyBhIGJhY2tlbmQgYW5kIG5lZWRzIHRoZSBIVFRQXFxuIyBtZXRob2QgdG8gY2FsbCBpdCB3aXRoLiBWZXJpZmllZCBmb3IgYWxsIGZvdXIgbm9uLU1PQ0sgdHlwZXMuIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGdpaG1fdHlwZXMgOj0ge1xcXCJBV1NcXFwiLCBcXFwiQVdTX1BST1hZXFxcIiwgXFxcIkhUVFBcXFwiLCBcXFwiSFRUUF9QUk9YWVxcXCJ9XFxuXFxuX3BmX2FwZ2lobV9taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRpbnRlZyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiSW50ZWdyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoaW50ZWcpXFxuXFx0b2JqZWN0LmdldChpbnRlZywgXFxcIkludGVncmF0aW9uSHR0cE1ldGhvZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1pbnRlZ3JhdGlvbi1odHRwLW1ldGhvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb24uSW50ZWdyYXRpb25IdHRwTWV0aG9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnRlZ3JhdGlvbiB0eXBlICclcycgaGFzIG5vIEludGVncmF0aW9uSHR0cE1ldGhvZDsgdGhlIG1ldGhvZCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkVudW1lcmF0aW9uIHZhbHVlIGZvciBIdHRwTWV0aG9kIG11c3QgYmUgbm9uLWVtcHR5XFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdFxcXCJTZXQgSW50ZWdyYXRpb24uSW50ZWdyYXRpb25IdHRwTWV0aG9kIChQT1NUIGZvciBBV1MvQVdTX1BST1hZIExhbWJkYSBiYWNrZW5kcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LW1ldGhvZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnRlZ3JhdGlvbi5UeXBlXFxcIilcXG5cXHR0IGluIF9wZl9hcGdpaG1fdHlwZXNcXG5cXHRfcGZfYXBnaWhtX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1tZXRob2QtYXV0aG9yaXplci1pZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ1VTVE9NIGFuZCBDT0dOSVRPX1VTRVJfUE9PTFMgYXV0aG9yaXphdGlvbiBuZWVkIEF1dGhvcml6ZXJJZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggYXV0aG9yaXplci1iYWNrZWQgYXV0aG9yaXphdGlvbiB0eXBlcyBwb2ludCBhdCBhbiBBdXRob3JpemVyOyB0aGVcXG4jIG1ldGhvZCBjcmVhdGUgcmVqZWN0cyB0aGVtIHdpdGhvdXQgb25lLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnbWFpZF9taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXV0aG9yaXplcklkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LW1ldGhvZC1hdXRob3JpemVyLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVySWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkF1dGhvcml6YXRpb25UeXBlICclcycgaXMgc2V0IGJ1dCBBdXRob3JpemVySWQgaXMgbm90OyB0aGUgbWV0aG9kIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBhdXRob3JpemVyIElEIHNwZWNpZmllZC4gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiB0eXBlIHRvIENVU1RPTSBvciBDT0dOSVRPX1VTRVJfUE9PTFMgcmVxdWlyZXMgYSB2YWxpZCBhdXRob3JpemVyLlxcXFxcXFwiXFxcIiwgW2F0XSksXFxuXFx0XFxcIlNldCBBdXRob3JpemVySWQgdG8gdGhlIGF1dGhvcml6ZXIgdGhpcyBtZXRob2Qgc2hvdWxkIHVzZSwgb3IgY2hhbmdlIEF1dGhvcml6YXRpb25UeXBlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tZXRob2QuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHRhdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6YXRpb25UeXBlXFxcIilcXG5cXHRhdCBpbiB7XFxcIkNVU1RPTVxcXCIsIFxcXCJDT0dOSVRPX1VTRVJfUE9PTFNcXFwifVxcblxcdF9wZl9hcGdtYWlkX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1tb2RlbC1zY2hlbWEtdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTW9kZWwgc2NoZW1hICd0eXBlJyBtdXN0IGJlIGEgSlNPTiBTY2hlbWEgZHJhZnQtNCB0eXBlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6Ok1vZGVsXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgU2NoZW1hIGJvZHkgaXMgb3BhcXVlIEpTT04gdG8gZXZlcnkgc2NoZW1hIGxheWVyLiBGdWxsIGRyYWZ0LTRcXG4jIHZhbGlkYXRpb24gaXMgb3V0IG9mIHNjb3BlOyBhIGxpdGVyYWwgdG9wLWxldmVsIFxcXCJ0eXBlXFxcIiBvdXRzaWRlIHRoZVxcbiMgZHJhZnQtNCBzZXQgKGEgY29tbW9uIHR5cG8gbGlrZSBcXFwiU3RyaW5nXFxcIikgaXMgcHJvdmFibHkgZmF0YWwuXFxuX3BmX2FwZ21zdF90eXBlcyA6PSB7XFxcImFycmF5XFxcIiwgXFxcImJvb2xlYW5cXFwiLCBcXFwiaW50ZWdlclxcXCIsIFxcXCJudWxsXFxcIiwgXFxcIm51bWJlclxcXCIsIFxcXCJvYmplY3RcXFwiLCBcXFwic3RyaW5nXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LW1vZGVsLXNjaGVtYS10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TY2hlbWEudHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTW9kZWwgc2NoZW1hIHR5cGUgJyVzJyBpcyBub3QgYSBKU09OIFNjaGVtYSBkcmFmdC00IHR5cGU7IHRoZSBtb2RlbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgbW9kZWwgc3BlY2lmaWVkOiBWYWxpZGF0aW9uIFJlc3VsdDogd2FybmluZ3MgOiBbXSwgZXJyb3JzIDogW0ludmFsaWQgbW9kZWwgc2NoZW1hIHNwZWNpZmllZF1cXFxcXFxcIlxcXCIsIFt0XSksXFxuXFx0XFxcIlVzZSBvbmUgb2YgYXJyYXksIGJvb2xlYW4sIGludGVnZXIsIG51bGwsIG51bWJlciwgb2JqZWN0LCBzdHJpbmcgKGxvd2VyY2FzZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LW1vZGVsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1vZGVsXFxcIilcXG5cXHRzY2ggOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlbWFcXFwiKVxcblxcdGlzX29iamVjdChzY2gpXFxuXFx0dCA6PSBvYmplY3QuZ2V0KHNjaCwgXFxcInR5cGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdHQgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdGlzX3N0cmluZyh0KVxcblxcdG5vdCB0IGluIF9wZl9hcGdtc3RfdHlwZXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1yZXNvdXJjZS1wYXRoLXBhcnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBhdGhQYXJ0IGFsbG93cyBhLXpBLVowLTkuXy06IG9yIG9uZSBjdXJseS1icmFjZSB2YXJpYWJsZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVmFsaWQgZm9ybXMgcGVyIHRoZSBzZXJ2aWNlIGVycm9yIGl0c2VsZjogcGxhaW4gW2EtekEtWjAtOS5fOi1dKywgb3IgYVxcbiMgd2hvbGUtcGFydCB2YXJpYWJsZSB7bmFtZX0gLyBncmVlZHkge25hbWUrfS5cXG5fcGZfYXBncnBwX29rKHBwKSBpZiByZWdleC5tYXRjaChgXlthLXpBLVowLTkuXzotXSskYCwgcHApXFxuXFxuX3BmX2FwZ3JwcF9vayhwcCkgaWYgcmVnZXgubWF0Y2goYF5cXFxce1thLXpBLVowLTkuXy1dK1xcXFwrP1xcXFx9JGAsIHBwKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctcmVzb3VyY2UtcGF0aC1wYXJ0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXRoUGFydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGF0aFBhcnQgJyVzJyBoYXMgY2hhcmFjdGVycyB0aGUgc2VydmljZSByZWplY3RzOyB0aGUgcmVzb3VyY2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJSZXNvdXJjZSdzIHBhdGggcGFydCBvbmx5IGFsbG93IGEtekEtWjAtOS5fLTogb3IgYSB2YWxpZCBncmVlZHkgcGF0aCB2YXJpYWJsZSBhbmQgY3VybHkgYnJhY2VzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQuXFxcXFxcXCJcXFwiLCBbcHBdKSxcXG5cXHRcXFwiVXNlIG9ubHkgYS16QS1aMC05Ll8tOiBpbiB0aGUgcGF0aCBwYXJ0LCBvciBhIHNpbmdsZSB7dmFyaWFibGV9IC8ge2dyZWVkeSt9IGZvcm1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LXJlc291cmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OlJlc291cmNlXFxcIilcXG5cXHRwcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBhdGhQYXJ0XFxcIilcXG5cXHRpc19zdHJpbmcocHApXFxuXFx0bm90IF9wZl9hcGdycHBfb2socHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctc3RhZ2UtdmFyaWFibGUtdmFsdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN0YWdlIHZhcmlhYmxlIHZhbHVlcyBoYXZlIGEgcmVzdHJpY3RlZCBjaGFyYWN0ZXIgc2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbGxvd2VkIHBlciB0aGUgc2VydmljZSBlcnJvciBpdHNlbGY6IGFscGhhbnVtZXJpY3MgcGx1cyBzcGFjZSBhbmRcXG4jIC0gLiBfIDogLyA/ICYgPSAsIChub3RlOiBzcGFjZSBJUyBsZWdhbCkuXFxuX3BmX2FwZ3N2dl9vayh2KSBpZiByZWdleC5tYXRjaChgXlthLXpBLVowLTkgLl86Lz8mPSwtXSokYCwgdilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXN0YWdlLXZhcmlhYmxlLXZhbHVlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlZhcmlhYmxlcy4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiU3RhZ2UgdmFyaWFibGUgJyVzJyBoYXMgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBhbGxvd2VkIHNldDsgdGhlIHN0YWdlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBzdGFnZSB2YXJpYWJsZSB2YWx1ZSBvZiBrZXkgJXMuICBQbGVhc2UgdXNlIHZhbHVlcyB3aXRoIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB0aGUgc3ltYm9scyAnICcsIC0nLCAnLicsICdfJywgJzonLCAnLycsICc/JywgJyYnLCAnPScsIGFuZCAnLCcuXFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdFxcXCJSZXN0cmljdCB0aGUgdmFsdWUgdG8gYWxwaGFudW1lcmljcyBhbmQgJyAnLCAtLCAuLCBfLCA6LCAvLCA/LCAmLCA9LCAsXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3N0YWdlLXZhcmlhYmxlcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVxcXCIpXFxuXFx0dmFycyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZhcmlhYmxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHZhcnMpXFxuXFx0c29tZSBrLCB2IGluIHZhcnNcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgX3BmX2FwZ3N2dl9vayh2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXRva2VuLWF1dGhvcml6ZXItaWRlbnRpdHktc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUT0tFTiBhdXRob3JpemVycyBuZWVkIElkZW50aXR5U291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRPS0VOIGF1dGhvcml6ZXJzIHJlYWQgdGhlIHRva2VuIGZyb20gdGhlIGhlYWRlciBuYW1lZCBieSBJZGVudGl0eVNvdXJjZSxcXG4jIHNvIHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBSRVFVRVNUIGF1dGhvcml6ZXJzIGFyZSBvdXQgb2ZcXG4jIHNjb3BlOiB0aGV5IG5lZWQgaXQgb25seSB3aXRoIGNhY2hpbmcgZW5hYmxlZCAodW5tZWFzdXJlZCkuIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGd0aXNfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIklkZW50aXR5U291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXRva2VuLWF1dGhvcml6ZXItaWRlbnRpdHktc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JZGVudGl0eVNvdXJjZVxcXCIsXFxuXFx0XFxcIlRPS0VOIGF1dGhvcml6ZXIgaGFzIG5vIElkZW50aXR5U291cmNlOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIklkZW50aXR5U291cmNlIGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IElkZW50aXR5U291cmNlLCBlLmcuIG1ldGhvZC5yZXF1ZXN0LmhlYWRlci5BdXRob3JpemF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJUT0tFTlxcXCJcXG5cXHRfcGZfYXBndGlzX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWFwaS1uYW1lLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIEFwaSBuZWVkcyBhIE5hbWUgdW5sZXNzIGFuIE9wZW5BUEkgYm9keSBwcm92aWRlcyBvbmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1pcnJvcnMgY2ZuLWxpbnQgRTM2NjAgZm9yIFJFU1QgQVBJcywgd2hpY2ggaGFzIG5vIEFwaUdhdGV3YXlWMlxcbiMgY291bnRlcnBhcnQ6IHdpdGhvdXQgYSBCb2R5IHRvIGNhcnJ5IGluZm8udGl0bGUsIE5hbWUgaXMgbWFuZGF0b3J5LlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYWd2MmFucl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1hcGktbmFtZS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTmFtZVxcXCIsXFxuXFx0XFxcIkFwaSBoYXMgbm8gTmFtZSBhbmQgbm8gT3BlbkFQSSBib2R5IHRvIHRha2Ugb25lIGZyb207IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEFQSSBuYW1lIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IE5hbWUsIG9yIHByb3ZpZGUgdGhlIGRlZmluaXRpb24gdmlhIEJvZHkgLyBCb2R5UzNMb2NhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiTmFtZVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJCb2R5XFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIkJvZHlTM0xvY2F0aW9uXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWF3cy1wcm94eS1wYXlsb2FkLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVdTX1BST1hZIGludGVncmF0aW9ucyB0YWtlIFBheWxvYWRGb3JtYXRWZXJzaW9uIDEuMCBvciAyLjBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU2NvcGVkIHRvIGludGVncmF0aW9ucyB3aG9zZSBBcGkgc2libGluZyBpcyBwcm92YWJseSBIVFRQICh0aGUgYmVuY2hlZFxcbiMgc2hhcGUpOyBXZWJTb2NrZXQgaW50ZWdyYXRpb25zIGFyZSBvdXQgb2Ygc2NvcGUuXFxuX3BmX2FndjJhcHBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWF3cy1wcm94eS1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQYXlsb2FkRm9ybWF0VmVyc2lvbiAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgaW50ZWdyYXRpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJVbnN1cHBvcnRlZCBQYXlsb2FkRm9ybWF0VmVyc2lvbjogJXNcXFxcXFxcIlxcXCIsIFtwdiwgcHZdKSxcXG5cXHRcXFwiVXNlIDEuMCBvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItaW50ZWdyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnRlZ3JhdGlvblR5cGVcXFwiKSA9PSBcXFwiQVdTX1BST1hZXFxcIlxcblxcdF9wZl9hZ3YyYXBwX2h0dHBfYXBpKG5hbWUpXFxuXFx0cHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKHB2KVxcblxcdG5vdCBwdiBpbiB7XFxcIjEuMFxcXCIsIFxcXCIyLjBcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItY29ycy1jcmVkZW50aWFscy13aWxkY2FyZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDT1JTIEFsbG93Q3JlZGVudGlhbHMgY2Fubm90IHBhaXIgd2l0aCBhIHdpbGRjYXJkIG9yaWdpblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIENPUlMgc3BlYyBmb3JiaWRzIGNyZWRlbnRpYWxlZCByZXF1ZXN0cyBhZ2FpbnN0IGEgd2lsZGNhcmQgb3JpZ2luLFxcbiMgYW5kIHRoZSBBUEkgY3JlYXRlIGVuZm9yY2VzIGl0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1jb3JzLWNyZWRlbnRpYWxzLXdpbGRjYXJkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvcnNDb25maWd1cmF0aW9uLkFsbG93T3JpZ2lucy4lZFxcXCIsIFtvLmluZGV4XSksXFxuXFx0XFxcIkNvcnNDb25maWd1cmF0aW9uIHNldHMgQWxsb3dDcmVkZW50aWFscyB3aXRoIGEgJyonIG9yaWdpbjsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImFsbG93LWNyZWRlbnRpYWxzIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FsbG93LW9yaWdpbicgaXMgKlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiTGlzdCBleHBsaWNpdCBvcmlnaW5zLCBvciBkcm9wIEFsbG93Q3JlZGVudGlhbHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktY29ycy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd0NyZWRlbnRpYWxzXFxcIikpID09IHRydWVcXG5cXHRzb21lIG8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvcnNDb25maWd1cmF0aW9uLkFsbG93T3JpZ2luc1xcXCIpXFxuXFx0by52YWx1ZSA9PSBcXFwiKlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcHJveHktcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFBfUFJPWFkgaW50ZWdyYXRpb25zIG9ubHkgdGFrZSBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIDIuMCBldmVudCBmb3JtYXQgaXMgTGFtYmRhLW9ubHk7IEhUVFBfUFJPWFkgYmFja2VuZHMgbXVzdCBzdGF5IG9uXFxuIyAxLjAuIFNjb3BlZCB0byB0aGUgYmVuY2hlZCBzaGFwZSAoQXBpIHNpYmxpbmcgcHJvdmFibHkgSFRUUCkuXFxuX3BmX2FndjJocHBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcHJveHktcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0XFxcIkhUVFBfUFJPWFkgaW50ZWdyYXRpb25zIG9ubHkgc3VwcG9ydCBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjA7IHRoZSBpbnRlZ3JhdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlBheWxvYWRGb3JtYXRWZXJzaW9uIDIuMCBpcyBub3Qgc3VwcG9ydGVkIGZvciBpbnRlZ3JhdGlvbiBvZiB0eXBlIEhUVFBfUFJPWFlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBQYXlsb2FkRm9ybWF0VmVyc2lvbiB0byAxLjAgKG9yIG9taXQgaXQpLCBvciBzd2l0Y2ggdG8gYW4gQVdTX1BST1hZIGludGVncmF0aW9uIGZvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItaW50ZWdyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnRlZ3JhdGlvblR5cGVcXFwiKSA9PSBcXFwiSFRUUF9QUk9YWVxcXCJcXG5cXHRfcGZfYWd2MmhwcF9odHRwX2FwaShuYW1lKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiKSA9PSBcXFwiMi4wXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1rZXlcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSFRUUCBBUEkgcm91dGUga2V5cyBhcmUgXFxcIk1FVEhPRCAvcGF0aFxcXCIgb3IgJGRlZmF1bHRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgV2ViU29ja2V0IHJvdXRlIGtleXMgYXJlIGZyZWUtZm9ybSwgc28gdGhpcyBvbmx5IGp1ZGdlcyByb3V0ZXMgd2hvc2UgQXBpXFxuIyBzaWJsaW5nIGlzIHByb3ZhYmx5IEhUVFAuIFRSQUNFIGlzIGRlcGxveS12ZXJpZmllZCBhcyByZWplY3RlZDsgcGF0aHMgd2l0aFxcbiMgc3BhY2VzIGFyZSBsZWZ0IGFsb25lICh1bm1lYXN1cmVkKS5cXG5fcGZfYWd2MnJrX21ldGhvZHMgOj0ge1xcXCJHRVRcXFwiLCBcXFwiUE9TVFxcXCIsIFxcXCJQVVRcXFwiLCBcXFwiUEFUQ0hcXFwiLCBcXFwiREVMRVRFXFxcIiwgXFxcIkhFQURcXFwiLCBcXFwiT1BUSU9OU1xcXCIsIFxcXCJBTllcXFwifVxcblxcbl9wZl9hZ3YycmtfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxuX3BmX2FndjJya19vayhyaykgaWYgcmsgPT0gXFxcIiRkZWZhdWx0XFxcIlxcblxcbl9wZl9hZ3Yycmtfb2socmspIGlmIHtcXG5cXHRwYXJ0cyA6PSBzcGxpdChyaywgXFxcIiBcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAyXFxuXFx0cGFydHNbMF0gaW4gX3BmX2FndjJya19tZXRob2RzXFxuXFx0c3RhcnRzd2l0aChwYXJ0c1sxXSwgXFxcIi9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlS2V5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSb3V0ZUtleSAnJXMnIGlzIG1hbGZvcm1lZCBmb3IgYW4gSFRUUCBBUEk7IHRoZSByb3V0ZSBjcmVhdGUgZmFpbHMgd2l0aCAnVGhlIHByb3ZpZGVkIHJvdXRlIGtleSBpcyBub3QgZm9ybWF0dGVkIHByb3Blcmx5IGZvciBIVFRQIHByb3RvY29sLiBGb3JtYXQgc2hvdWxkIGJlIFxcXFxcXFwiW0hUVFAgTUVUSE9EXSAvW1JFU09VUkNFIFBBVEhdXFxcXFxcXCIgb3IgXFxcXFxcXCIkZGVmYXVsdFxcXFxcXFwiJ1xcXCIsIFtya10pLFxcblxcdFxcXCJVc2UgXFxcXFxcXCJNRVRIT0QgL3BhdGhcXFxcXFxcIiB3aXRoIE1FVEhPRCBvbmUgb2YgR0VUIFBPU1QgUFVUIFBBVENIIERFTEVURSBIRUFEIE9QVElPTlMgQU5ZLCBvciAkZGVmYXVsdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1kZXZlbG9wLXJvdXRlcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXFxcIilcXG5cXHRfcGZfYWd2MnJrX2h0dHBfYXBpKG5hbWUpXFxuXFx0cmsgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Sb3V0ZUtleVxcXCIpXFxuXFx0aXNfc3RyaW5nKHJrKVxcblxcdG5vdCBfcGZfYWd2MnJrX29rKHJrKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1zZWxlY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSFRUUCBBUElzIGFjY2VwdCBvbmx5IHRoZSBtZXRob2QtcGF0aCByb3V0ZSBzZWxlY3Rpb24gZXhwcmVzc2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBzcGVsbGluZ3MgZGVwbG95LXZlcmlmaWVkIGFzIGFjY2VwdGVkOiB0aGUgZG9jdW1lbnRlZFxcbiMgXFxcIiRyZXF1ZXN0Lm1ldGhvZCAkcmVxdWVzdC5wYXRoXFxcIiBhbmQgdGhlIFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFwiXFxuIyBmb3JtIHRoZSBzZXJ2aWNlIGVycm9yIGl0c2VsZiBwcmludHMgKGJlbmNoIHYwMmIpLlxcbl9wZl9hZ3YyaHJzX2FsbG93ZWQgOj0ge1xcXCIkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aFxcXCIsIFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXJvdXRlLXNlbGVjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIVFRQIEFQSSBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb24gJyVzJyBpcyBub3Qgc3VwcG9ydGVkOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoICdSb3V0ZSBzZWxlY3Rpb24gZXhwcmVzc2lvbiBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBcXFxcXFxcIiR7cmVxdWVzdC5tZXRob2R9ICR7cmVxdWVzdC5wYXRofVxcXFxcXFwiJ1xcXCIsIFtyc2VdKSxcXG5cXHRcXFwiVXNlICRyZXF1ZXN0Lm1ldGhvZCAkcmVxdWVzdC5wYXRoLCBvciBvbWl0IHRoZSBwcm9wZXJ0eSAoSFRUUCBBUElzIGRlZmF1bHQgdG8gaXQpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWFwaS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG5cXHRyc2UgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiKVxcblxcdGlzX3N0cmluZyhyc2UpXFxuXFx0bm90IHJzZSBpbiBfcGZfYWd2Mmhyc19hbGxvd2VkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1qd3QtYXV0aG9yaXplci1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSldUIGF1dGhvcml6ZXJzIG5lZWQgSnd0Q29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgSldUIGF1dGhvcml6ZXIgaXMgbm90aGluZyBidXQgaXRzIGlzc3Vlci9hdWRpZW5jZSBjb25maWcsIHNvIHRoZVxcbiMgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJqYWNfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkp3dENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1qd3QtYXV0aG9yaXplci1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkp3dENvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJKV1QgYXV0aG9yaXplciBoYXMgbm8gSnd0Q29uZmlndXJhdGlvbjsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJKd3RDb25maWd1cmF0aW9uIG11c3Qgbm90IGJlIG51bGwgZm9yIEpXVCBBdXRob3JpemVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgSnd0Q29uZmlndXJhdGlvbiB3aXRoIElzc3VlciBhbmQgQXVkaWVuY2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiSldUXFxcIlxcblxcdF9wZl9hZ3YyamFjX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLXJlcXVlc3QtYXV0aG9yaXplci1wYXlsb2FkLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUkVRVUVTVCBhdXRob3JpemVycyBvbiBIVFRQIEFQSXMgbmVlZCBBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZXF1aXJlZCBvbiBIVFRQIEFQSXMgb25seSAtIFdlYlNvY2tldCBSRVFVRVNUIGF1dGhvcml6ZXJzIG11c3QgTk9UIHNldFxcbiMgaXQsIHNvIHRoZSBydWxlIGZpcmVzIHNvbGVseSB3aGVuIHRoZSBBcGkgc2libGluZyBpcyBwcm92YWJseSBIVFRQLlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYWd2MnJhcF9odHRwX2FwaShuYW1lKSBpZiB7XFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXBpSWRcXFwiKVxcblxcdGFwaSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShhcGksIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sVHlwZVxcXCIpID09IFxcXCJIVFRQXFxcIlxcbn1cXG5cXG5fcGZfYWd2MnJhcF9taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItcmVxdWVzdC1hdXRob3JpemVyLXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIixcXG5cXHRcXFwiUkVRVUVTVCBhdXRob3JpemVyIG9uIGFuIEhUVFAgQVBJIGhhcyBubyBBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb247IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uIGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciBSRVFVRVNUIGF1dGhvcml6ZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb24gdG8gMS4wIG9yIDIuMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJSRVFVRVNUXFxcIlxcblxcdF9wZl9hZ3YycmFwX2h0dHBfYXBpKG5hbWUpXFxuXFx0X3BmX2FndjJyYXBfbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItd2Vic29ja2V0LXJvdXRlLXNlbGVjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXZWJTb2NrZXQgQVBJcyBuZWVkIFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgV2ViU29ja2V0IEFQSXMgcm91dGUgYnkgZXZhbHVhdGluZyB0aGlzIGV4cHJlc3Npb24gYWdhaW5zdCBlYWNoIG1lc3NhZ2UsXFxuIyBzbyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJ3cnNfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLXdlYnNvY2tldC1yb3V0ZS1zZWxlY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsXFxuXFx0XFxcIldlYlNvY2tldCBBUEkgaGFzIG5vIFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbjsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uLCBlLmcuICRyZXF1ZXN0LmJvZHkuYWN0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWFwaS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiV0VCU09DS0VUXFxcIlxcblxcdF9wZl9hZ3Yyd3JzX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctY29vbGRvd24tbm9uLW5lZ2F0aXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29vbGRvd24gY2Fubm90IGJlIG5lZ2F0aXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDb29sZG93biBpcyBhIHN0cmluZyBpbiB0aGUgc2NoZW1hOyBvbmx5IHRoZSBzZXJ2aWNlIGtub3dzIGl0IGlzIGFcXG4jIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLWNvb2xkb3duLW5vbi1uZWdhdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29vbGRvd25cXFwiLFxcblxcdHNwcmludGYoXFxcIkNvb2xkb3duICV2IGlzIG5lZ2F0aXZlOyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwXFxcXFxcXCJcXFwiLCBbY10pLFxcblxcdFxcXCJVc2UgemVybyBvciBhIHBvc2l0aXZlIG51bWJlciBvZiBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0YyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db29sZG93blxcXCIpKVxcblxcdGMgPCAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWRlc2lyZWQtY2FwYWNpdHktcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEZXNpcmVkQ2FwYWNpdHkgbXVzdCBzaXQgYmV0d2VlbiBNaW5TaXplIGFuZCBNYXhTaXplXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2l6ZXMgYXJlIHN0cmluZy10eXBlZCBpbiB0aGUgc2NoZW1hOyB0aGUgYmV0d2Vlbi1yZWxhdGlvbnNoaXAgaXNcXG4jIGEgdGhyZWUtd2F5IGNyb3NzLXByb3BlcnR5IGNoZWNrLiBUaGUgbWluPm1heCBwYWlyIGl0c2VsZiBpcyBlbmdpbmVcXG4jIHRlcnJpdG9yeSAoRTM3MDYpIGFuZCBub3QgcmVwZWF0ZWQgaGVyZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1kZXNpcmVkLWNhcGFjaXR5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXNpcmVkQ2FwYWNpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkRlc2lyZWRDYXBhY2l0eSAldiBpcyBvdXRzaWRlIFsldiwgJXZdOyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJEZXNpcmVkIGNhcGFjaXR5OiV2IG11c3QgYmUgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIG1pbiBzaXplOiV2IGFuZCBtYXggc2l6ZToldlxcXFxcXFwiXFxcIiwgW2RjLCBtbiwgbXgsIGRjLCBtbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5TaXplIDw9IERlc2lyZWRDYXBhY2l0eSA8PSBNYXhTaXplXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0ZGMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzaXJlZENhcGFjaXR5XFxcIikpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWluU2l6ZVxcXCIpKVxcblxcdG14IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1heFNpemVcXFwiKSlcXG5cXHRtbiA8PSBteFxcblxcdF9wZl9hc2dkY3Jfb3V0KGRjLCBtbiwgbXgpXFxufVxcblxcbl9wZl9hc2dkY3Jfb3V0KGRjLCBtbiwgXykgaWYgZGMgPCBtblxcblxcbl9wZl9hc2dkY3Jfb3V0KGRjLCBfLCBteCkgaWYgZGMgPiBteFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWhlYWx0aC1jaGVjay1ncmFjZS1wZXJpb2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIZWFsdGhDaGVja0dyYWNlUGVyaW9kIGNhbm5vdCBiZSBuZWdhdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSB0eXBlcyBpdCBhcyBhIGJhcmUgaW50ZWdlciB3aXRoIG5vIGZsb29yOyB6ZXJvIGlzIHRoZVxcbiMgc2VydmljZSBkZWZhdWx0LCBzbyBvbmx5IG5lZ2F0aXZlcyBhcmUgY2xhaW1lZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja0dyYWNlUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIZWFsdGhDaGVja0dyYWNlUGVyaW9kICV2IGlzIG5lZ2F0aXZlOyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJHcmFjZSBwZXJpb2QgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuXFxcXFxcXCJcXFwiLCBbZ10pLFxcblxcdFxcXCJVc2UgemVybyBvciBhIHBvc2l0aXZlIG51bWJlciBvZiBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0ZyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja0dyYWNlUGVyaW9kXFxcIikpXFxuXFx0ZyA8IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctb25kZW1hbmQtcGVyY2VudGFnZS1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eSB0b3BzIG91dCBhdCAxMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgcGVyY2VudGFnZSBzcGxpdCBjYW5ub3QgZXhjZWVkIDEwMDsgdGhlIHNjaGVtYSBoYXMgbm8gbWF4aW11bS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1vbmRlbWFuZC1wZXJjZW50YWdlLW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kuSW5zdGFuY2VzRGlzdHJpYnV0aW9uLk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJPbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eSAldiBpcyBvdmVyIDEwMDsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJVc2UgYSBwZXJjZW50YWdlIGJldHdlZW4gMCBhbmQgMTAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLWluc3RhbmNlc2Rpc3RyaWJ1dGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NaXhlZEluc3RhbmNlc1BvbGljeS5JbnN0YW5jZXNEaXN0cmlidXRpb24uT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHlcXFwiKSlcXG5cXHRwID4gMTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLXRhcmdldC12YWx1ZS1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCB0cmFja2luZyBuZWVkcyBhIHBvc2l0aXZlIFRhcmdldFZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpTY2FsaW5nUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBmbG9vciBpcyBlZmZlY3RpdmVseSBcXFwicG9zaXRpdmVcXFwiICg4LjVlLTEyKTsgemVybyBhbmRcXG4jIG5lZ2F0aXZlcyBhcmUgcmVqZWN0ZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctdGFyZ2V0LXZhbHVlLXBvc2l0aXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRUcmFja2luZ0NvbmZpZ3VyYXRpb24uVGFyZ2V0VmFsdWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhcmdldFZhbHVlICV2IGlzIG5vdCBwb3NpdGl2ZTsgdGhlIHBvbGljeSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlRhcmdldCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gOC41MTU5MkUtMTIgYW5kIDEuMTc0MjcxRTE3XFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2UgYSBwb3NpdGl2ZSB0YXJnZXQgdmFsdWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1zY2FsaW5ncG9saWN5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpTY2FsaW5nUG9saWN5XFxcIilcXG5cXHR2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldFRyYWNraW5nQ29uZmlndXJhdGlvbi5UYXJnZXRWYWx1ZVxcXCIpKVxcblxcdHYgPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy16b25lLW9yLXN1Ym5ldC1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZ3JvdXAgbmVlZHMgQXZhaWxhYmlsaXR5Wm9uZXMsIEF2YWlsYWJpbGl0eVpvbmVJZHMsIG9yIHN1Ym5ldHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBsYWNlbWVudCBtdXN0IGNvbWUgZnJvbSBzb21ld2hlcmUuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy16b25lLW9yLXN1Ym5ldC1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVlBDWm9uZUlkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJOZWl0aGVyIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBub3IgVlBDWm9uZUlkZW50aWZpZXIgaXMgc2V0OyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJZb3UgbXVzdCBzcGVjaWZ5IDEgb2YgZWl0aGVyIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBvciBTdWJuZXRzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVlBDWm9uZUlkZW50aWZpZXIgd2l0aCB0aGUgdGFyZ2V0IHN1Ym5ldHMgKG9yIEF2YWlsYWJpbGl0eVpvbmVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJBdmFpbGFiaWxpdHlab25lc1xcXCIpXFxuXFx0X3BmX2FzZ3pzcl9hYnNlbnQobmFtZSwgXFxcIkF2YWlsYWJpbGl0eVpvbmVJZHNcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJWUENab25lSWRlbnRpZmllclxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtY2UtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbXB1dGUgZW52aXJvbm1lbnQgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtY2UtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZUVudmlyb25tZW50TmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ29tcHV0ZUVudmlyb25tZW50TmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlRW52aXJvbm1lbnROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMTI4fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWNlLXZjcHVzLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWF4dkNwdXMgbXVzdCBiZSBhdCBsZWFzdCBNaW52Q3B1c1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1jZS12Y3B1cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5NYXh2Q3B1c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWF4dkNwdXMgJXYgaXMgYmVsb3cgTWludkNwdXMgJXYgKFxcXFxcXFwibWF4dkNwdXMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW52Q3B1cy5cXFxcXFxcIilcXFwiLCBbbXgsIG1uXSksXFxuXFx0XFxcIktlZXAgTWludkNwdXMgPD0gTWF4dkNwdXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuTWludkNwdXNcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLk1heHZDcHVzXFxcIikpXFxuXFx0bXggPCBtblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWZhcmdhdGUtY2UtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBjb21wdXRlIGVudmlyb25tZW50cyBjYW5ub3QgdGFrZSBBbGxvY2F0aW9uU3RyYXRlZ3kgb3IgSW5zdGFuY2VUeXBlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2JhdGNoZmNmX2NyKG5hbWUpIDo9IGNyIGlmIHtcXG5cXHRjciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGNyKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtY2UtZmllbGRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuJXNcXFwiLCBbZmllbGRdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyBpcyBub3QgYXBwbGljYWJsZSBmb3IgJXMgY29tcHV0ZSBlbnZpcm9ubWVudHM7IEJhdGNoIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW2ZpZWxkLCBjcl0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIEVDMi1vbmx5IGZpZWxkLCBvciBzd2l0Y2ggQ29tcHV0ZVJlc291cmNlcy5UeXBlIHRvIEVDMi9TUE9UXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRjciA6PSBfcGZfYmF0Y2hmY2ZfY3IobmFtZSlcXG5cXHRjciBpbiB7XFxcIkZBUkdBVEVcXFwiLCBcXFwiRkFSR0FURV9TUE9UXFxcIn1cXG5cXHRjcmVzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXNcXG5cXHRpc19vYmplY3QoY3JlcylcXG5cXHRzb21lIGZpZWxkIGluIHtcXFwiQWxsb2NhdGlvblN0cmF0ZWd5XFxcIiwgXFxcIkluc3RhbmNlVHlwZXNcXFwifVxcblxcdG9iamVjdC5nZXQoY3JlcywgZmllbGQsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGYXJnYXRlIGpvYiBkZWZpbml0aW9ucyBtdXN0IHVzZSBhIHN1cHBvcnRlZCB2Q1BVL21lbW9yeSBjb21iaW5hdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvdXNlcmd1aWRlL2ZhcmdhdGUuaHRtbFxcXCJcXG5cXG4jIE1lbW9yeSBzcGVjIHBlciB2Q1BVIHRpZXI6IDAuMjUgaXMgYW4gZXhwbGljaXQgc2V0OyB0aGUgcmVzdCBhcmVcXG4jIFttaW4sIG1heCwgc3RlcF0gYXJpdGhtZXRpYyByYW5nZXMuIEtleXMgYXJlIG51bWJlcnMgc28gXFxcIjEuMFxcXCIgYW5kXFxuIyBcXFwiMVxcXCIgYm90aCBsYW5kIG9uIHRoZSBzYW1lIHRpZXIgYWZ0ZXIgdG9fbnVtYmVyLlxcbl9wZl9iYXRjaGZjbV9zZXQgOj0gezUxMiwgMTAyNCwgMjA0OH1cXG5cXG5fcGZfYmF0Y2hmY21fcmFuZ2UgOj0gezAuNTogWzEwMjQsIDQwOTYsIDEwMjRdLCAxOiBbMjA0OCwgODE5MiwgMTAyNF0sIDI6IFs0MDk2LCAxNjM4NCwgMTAyNF0sIDQ6IFs4MTkyLCAzMDcyMCwgMTAyNF0sIDg6IFsxNjM4NCwgNjE0NDAsIDQwOTZdLCAxNjogWzMyNzY4LCAxMjI4ODAsIDgxOTJdfVxcblxcbl9wZl9iYXRjaGZjbV9mYXJnYXRlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIpXFxuXFx0cGMudmFsdWUgPT0gXFxcIkZBUkdBVEVcXFwiXFxufVxcblxcbl9wZl9iYXRjaGZjbV9yZXEobmFtZSwgcnR5cGUpIDo9IHYgaWYge1xcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5SZXNvdXJjZVJlcXVpcmVtZW50c1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVHlwZVxcXCIsIFxcXCJcXFwiKSA9PSBydHlwZVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVmFsdWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0diA6PSB0b19udW1iZXIocmF3KVxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHR2ID09IDAuMjVcXG5cXHRub3QgbSBpbiBfcGZfYmF0Y2hmY21fc2V0XFxufVxcblxcbl9wZl9iYXRjaGZjbV9iYWQodiwgbSkgaWYge1xcblxcdHNwZWMgOj0gX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFx0bSA8IHNwZWNbMF1cXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0c3BlYyA6PSBfcGZfYmF0Y2hmY21fcmFuZ2Vbdl1cXG5cXHRtID4gc3BlY1sxXVxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHRzcGVjIDo9IF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcdChtIC0gc3BlY1swXSkgJSBzcGVjWzJdICE9IDBcXG59XFxuXFxuX3BmX2JhdGNoZmNtX3RpZXIodikgaWYgdiA9PSAwLjI1XFxuXFxuX3BmX2JhdGNoZmNtX3RpZXIodikgaWYgX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlZDUFUgJXYgaXMgbm90IGEgRmFyZ2F0ZSB0aWVyICgwLjI1LCAwLjUsIDEsIDIsIDQsIDgsIDE2KTsgQmF0Y2ggcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXNvdXJjZSByZXF1aXJlbWVudHMgLi4uIG5vdCB2YWxpZC5cXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0XFxcIlVzZSBvbmUgb2YgdGhlIEZhcmdhdGUgdkNQVSB0aWVyc1xcXCIsXFxuXFx0X3BmX2JhdGNoZmNtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmNtX2ZhcmdhdGUobmFtZSlcXG5cXHR2IDo9IF9wZl9iYXRjaGZjbV9yZXEobmFtZSwgXFxcIlZDUFVcXFwiKVxcblxcdG5vdCBfcGZfYmF0Y2hmY21fdGllcih2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5SZXNvdXJjZVJlcXVpcmVtZW50c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiTUVNT1JZICV2IE1pQiBpcyBub3QgdmFsaWQgZm9yIFZDUFUgJXY7IEJhdGNoIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzICgldiB2Q1BVLCAldiBNaUIpIG5vdCB2YWxpZC5cXFxcXFxcIlxcXCIsIFttLCB2LCB2LCBtXSksXFxuXFx0XFxcIlBpY2sgYSBtZW1vcnkgdmFsdWUgZnJvbSB0aGUgdGllcidzIHN1cHBvcnRlZCBsaXN0XFxcIixcXG5cXHRfcGZfYmF0Y2hmY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfYmF0Y2hmY21fZmFyZ2F0ZShuYW1lKVxcblxcdHYgOj0gX3BmX2JhdGNoZmNtX3JlcShuYW1lLCBcXFwiVkNQVVxcXCIpXFxuXFx0bSA6PSBfcGZfYmF0Y2hmY21fcmVxKG5hbWUsIFxcXCJNRU1PUllcXFwiKVxcblxcdF9wZl9iYXRjaGZjbV9iYWQodiwgbSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWV4ZWN1dGlvbi1yb2xlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBqb2IgZGVmaW5pdGlvbnMgcmVxdWlyZSBFeGVjdXRpb25Sb2xlQXJuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2JhdGNoZmVyX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIilcXG5cXHRwYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWV4ZWN1dGlvbi1yb2xlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzLkV4ZWN1dGlvblJvbGVBcm5cXFwiLFxcblxcdFxcXCJQbGF0Zm9ybUNhcGFiaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCBFeGVjdXRpb25Sb2xlQXJuIGlzIG1pc3NpbmcgKFxcXFxcXFwiZXhlY3V0aW9uUm9sZUFybiBpcyByZXF1aXJlZCBmb3IgRmFyZ2F0ZSBqb2JzLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlNldCBDb250YWluZXJQcm9wZXJ0aWVzLkV4ZWN1dGlvblJvbGVBcm5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfYmF0Y2hmZXJfZmFyZ2F0ZShuYW1lKVxcblxcdGNwIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QoY3ApXFxuXFx0b2JqZWN0LmdldChjcCwgXFxcIkV4ZWN1dGlvblJvbGVBcm5cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1tdWx0aW5vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNdWx0aS1ub2RlIHBhcmFsbGVsIGpvYnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1tdWx0aW5vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIixcXG5cXHRcXFwiVHlwZSBtdWx0aW5vZGUgY2Fubm90IHJ1biBvbiBGYXJnYXRlIChcXFxcXFxcIkZhcmdhdGUgZG9lcyBub3Qgc3VwcG9ydCBNTlAgam9ic1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlVzZSBFQzIgcGxhdGZvcm0gY2FwYWJpbGl0aWVzIGZvciBtdWx0aS1ub2RlIHBhcmFsbGVsIGpvYnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9tdWx0aS1ub2RlLXBhcmFsbGVsLWpvYnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJtdWx0aW5vZGVcXFwiXFxuXFx0c29tZSBwYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhdGZvcm1DYXBhYmlsaXRpZXNcXFwiKVxcblxcdHBjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWpkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJKb2IgZGVmaW5pdGlvbiBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtamQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSm9iRGVmaW5pdGlvbk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkpvYkRlZmluaXRpb25OYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAxMjggY2hhcmFjdGVyc1xcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAxMjggY2hhcmFjdGVyc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Kb2JEZWZpbml0aW9uTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDEyOH0kYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1tYW5hZ2VkLWNvbXB1dGUtcmVzb3VyY2VzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTUFOQUdFRCBjb21wdXRlIGVudmlyb25tZW50cyByZXF1aXJlIENvbXB1dGVSZXNvdXJjZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtbWFuYWdlZC1jb21wdXRlLXJlc291cmNlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlc1xcXCIsXFxuXFx0XFxcIlR5cGUgTUFOQUdFRCByZXF1aXJlcyBDb21wdXRlUmVzb3VyY2VzIChcXFxcXFxcImNvbXB1dGVSZXNvdXJjZXMgbXVzdCBiZSBwcm92aWRlZCBmb3IgYSBNQU5BR0VEIGNvbXB1dGUgZW52aXJvbm1lbnRcXFxcXFxcIilcXFwiLFxcblxcdFxcXCJBZGQgYSBDb21wdXRlUmVzb3VyY2VzIGJsb2NrLCBvciB1c2UgVHlwZSBVTk1BTkFHRURcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJNQU5BR0VEXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb21wdXRlUmVzb3VyY2VzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXF1ZXVlLW9yZGVyLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXIgbWF5IG5vdCBiZSBlbXB0eVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iUXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgYWNjZXB0cyBhbiBlbXB0eSBsaXN0OyB0aGUgc2VydmljZSByZWplY3RzIGl0LiBUcnVlXFxuIyBhYnNlbmNlIGlzIHNjaGVtYSB0ZXJyaXRvcnksIHNvIG9ubHkgdGhlIHByZXNlbnQtYW5kLWVtcHR5IHNoYXBlXFxuIyBpcyBjbGFpbWVkIChpbnB1dC5yZXNvdXJjZXMgc2VlcyB0aGUgcmF3IGxpc3QpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtcXVldWUtb3JkZXItcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyXFxcIixcXG5cXHRcXFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXIgaXMgZW1wdHkgKFxcXFxcXFwiY29tcHV0ZUVudmlyb25tZW50T3JkZXIgaXMgcmVxdWlyZWQuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiTGlzdCBhdCBsZWFzdCBvbmUgY29tcHV0ZSBlbnZpcm9ubWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVKb2JRdWV1ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iUXVldWVcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9yZGVyIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb21wdXRlRW52aXJvbm1lbnRPcmRlclxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkob3JkZXIpXFxuXFx0Y291bnQob3JkZXIpID09IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1yZXRyeS1hdHRlbXB0c1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJldHJ5U3RyYXRlZ3kuQXR0ZW1wdHMgbWF5IG5vdCBleGNlZWQgMTBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXJldHJ5LWF0dGVtcHRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXRyeVN0cmF0ZWd5LkF0dGVtcHRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZXRyeVN0cmF0ZWd5LkF0dGVtcHRzICV2IGlzIGFib3ZlIHRoZSBtYXhpbXVtIChcXFxcXFxcIlJldHJ5QXR0ZW1wdHMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwLlxcXFxcXFwiKVxcXCIsIFtuXSksXFxuXFx0XFxcIlVzZSBhdCBtb3N0IDEwIGF0dGVtcHRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVySm9iRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXRyeVN0cmF0ZWd5LkF0dGVtcHRzXFxcIikpXFxuXFx0biA+IDEwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtdGltZW91dC1taW5pbXVtXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGltZW91dC5BdHRlbXB0RHVyYXRpb25TZWNvbmRzIG11c3QgYmUgYXQgbGVhc3QgNjBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXRpbWVvdXQtbWluaW11bVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGltZW91dC5BdHRlbXB0RHVyYXRpb25TZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaW1lb3V0ICV2IHNlY29uZHMgaXMgYmVsb3cgdGhlIG1pbmltdW0gKFxcXFxcXFwiQXR0ZW1wdER1cmF0aW9uU2Vjb25kcyBpbiBUaW1lb3V0IG11c3QgYmUgYXQgbGVhc3QgNjAgc2Vjb25kcy5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbGVhc3QgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGltZW91dC5BdHRlbXB0RHVyYXRpb25TZWNvbmRzXFxcIikpXFxuXFx0biA8IDYwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtdW5tYW5hZ2VkLWZhcmdhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJVTk1BTkFHRUQgY29tcHV0ZSBlbnZpcm9ubWVudHMgY2Fubm90IGJlIEZhcmdhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaHVtZl9jcihuYW1lKSA6PSBjciBpZiB7XFxuXFx0Y3IgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLlR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhjcilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC11bm1hbmFnZWQtZmFyZ2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUeXBlIFVOTUFOQUdFRCBjYW5ub3QgcGFpciB3aXRoIENvbXB1dGVSZXNvdXJjZXMuVHlwZSAlcyAoXFxcXFxcXCJDYW5ub3QgY3JlYXRlIGFuIFVOTUFOQUdFRCBGYXJnYXRlIENvbXB1dGUgRW52aXJvbm1lbnQuXFxcXFxcXCIpXFxcIiwgW2NyXSksXFxuXFx0XFxcIlVzZSBNQU5BR0VEIGZvciBGYXJnYXRlLCBvciBFQzIgcmVzb3VyY2VzIGZvciBVTk1BTkFHRURcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJVTk1BTkFHRURcXFwiXFxuXFx0Y3IgOj0gX3BmX2JhdGNodW1mX2NyKG5hbWUpXFxuXFx0Y3IgaW4ge1xcXCJGQVJHQVRFXFxcIiwgXFxcIkZBUkdBVEVfU1BPVFxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYWdlbnRjb3JlLWdhdGV3YXktand0LWF1dGhvcml6ZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHYXRld2F5cyB3aXRoIEF1dGhvcml6ZXJUeXBlIENVU1RPTV9KV1QgcmVxdWlyZSBBdXRob3JpemVyQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2d3and0X2hhc19jb25maWcobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkF1dGhvcml6ZXJUeXBlIGlzIENVU1RPTV9KV1QgYnV0IEF1dGhvcml6ZXJDb25maWd1cmF0aW9uIGlzIG1pc3Npbmc7IHRoZSBDcmVhdGVHYXRld2F5IEFQSSByZXF1aXJlcyBpdCBhbmQgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBhIFZhbGlkYXRpb25FeGNlcHRpb25cXFwiLFxcblxcdFxcXCJBZGQgQXV0aG9yaXplckNvbmZpZ3VyYXRpb24uQ3VzdG9tSldUQXV0aG9yaXplciAoZGlzY292ZXJ5VXJsIGFuZCBhbGxvd2VkQXVkaWVuY2UvYWxsb3dlZENsaWVudHMpLCBvciBzd2l0Y2ggQXV0aG9yaXplclR5cGUgdG8gQVdTX0lBTVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUdhdGV3YXkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJDVVNUT01fSldUXFxcIlxcblxcdG5vdCBfcGZfZ3dqd3RfaGFzX2NvbmZpZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBZ2VudENvcmUgUnVudGltZSBuYW1lcyBtdXN0IG1hdGNoIFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9IChubyBoeXBoZW5zKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24g44K544Kt44O844Oe44GvIEFnZW50UnVudGltZU5hbWUg44Gu44OR44K/44O844Oz44KS5oyB44Gf44Gq44GE77yI44Ko44Oz44K444Oz57Sg6YCa44KK44CBXFxuIyAyMDI2LTA5LTAxIOOBqyAxLjcuMC1iZXRhIOOBp+eiuuiqje+8ieOBjOOAgUNyZWF0ZUFnZW50UnVudGltZSBBUEkg44GvXFxuIyBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSDjgpLlvLfliLbjgZnjgovjgILjg4/jgqTjg5Xjg7PlhaXjgorjga4gQ0RLIOmiqOWRveWQjeOBjOWumueVquOBruatu+WboOOAglxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYWdlbnRjb3JlLXJ1bnRpbWUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWdlbnRSdW50aW1lTmFtZSAnJXMnIGlzIGludmFsaWQ6IGl0IG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYW5kIHVuZGVyc2NvcmVzIChtYXggNDggY2hhcmFjdGVycywgaHlwaGVucyBhcmUgbm90IGFsbG93ZWQpOyBDcmVhdGVBZ2VudFJ1bnRpbWUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYW4gdW5kZXJzY29yZS1zZXBhcmF0ZWQgbmFtZSBzdWNoIGFzICdteV9hZ2VudF9ydW50aW1lJ1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUFnZW50UnVudGltZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2xvdWRGcm9udCB2aWV3ZXIgY2VydGlmaWNhdGVzIG11c3QgbGl2ZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkFjbUNlcnRpZmljYXRlQXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IHJlcXVpcmVzIHRoZSBBQ00gY2VydGlmaWNhdGUgdG8gYmUgaW4gdXMtZWFzdC0xLCBidXQgdGhlIGNlcnRpZmljYXRlIGlzIGluICVzXFxcIiwgW3JlZ2lvbl0pLFxcblxcdFxcXCJJc3N1ZSBvciBpbXBvcnQgdGhlIGNlcnRpZmljYXRlIGluIHVzLWVhc3QtMSAoZS5nLiBhIGRlZGljYXRlZCB1cy1lYXN0LTEgc3RhY2spIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY25hbWVzLWFuZC1odHRwcy1yZXF1aXJlbWVudHMuaHRtbCNodHRwcy1yZXF1aXJlbWVudHMtY2VydGlmaWNhdGUtaXNzdWVyXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcImFjbVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2FsaWFzY2VydF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tdmlld2VyY2VydGlmaWNhdGUuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X2ZpeCA6PSBcXFwiQXR0YWNoIGFuIEFDTSBjZXJ0aWZpY2F0ZSAoQWNtQ2VydGlmaWNhdGVBcm4sIHVzLWVhc3QtMSkgb3IgYW4gSUFNIGNlcnRpZmljYXRlLCB0b2dldGhlciB3aXRoIFNzbFN1cHBvcnRNZXRob2QgYW5kIE1pbmltdW1Qcm90b2NvbFZlcnNpb25cXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA6PSBjb3VudChbMSB8XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQWxpYXNlc1xcXCIpXFxuXSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtYWxpYXNlcy1yZXF1aXJlLWN1c3RvbS1jZXJ0aWZpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlXFxcIixcXG5cXHRcXFwiQSBkaXN0cmlidXRpb24gd2l0aCBBbGlhc2VzIGNhbm5vdCB1c2UgdGhlIENsb3VkRnJvbnQgZGVmYXVsdCBjZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9maXgsIF9wZl9jZl9hbGlhc2NlcnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA+IDBcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5DbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGUtcG9saWN5LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNhY2hlIHBvbGljeSBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtY2FjaGUtcG9saWN5LW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNhY2hlUG9saWN5Q29uZmlnLk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNhY2hlUG9saWN5Q29uZmlnLk5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogYWxwaGFudW1lcmljcywgZGFzaCBhbmQgdW5kZXJzY29yZVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDYWNoZVBvbGljeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpDYWNoZVBvbGljeVxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNhY2hlUG9saWN5Q29uZmlnLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNhY2hlZE1ldGhvZHMgbXVzdCBiZSBhIHN1YnNldCBvZiBBbGxvd2VkTWV0aG9kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfbWV0aG9kc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tY2FjaGViZWhhdmlvci5odG1sXFxcIlxcblxcbl9wZl9jZl9tZXRob2RzX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBDbG91ZEZyb250IGRlZmF1bHRzIEFsbG93ZWRNZXRob2RzIHRvIEdFVC9IRUFEIHdoZW4gdGhlIHByb3BlcnR5IGlzIG9taXR0ZWQsXFxuIyBzbyBhbiBvbWl0dGVkIEFsbG93ZWRNZXRob2RzIHN0aWxsIGNvbnN0cmFpbnMgd2hhdCBtYXkgYmUgY2FjaGVkLlxcbl9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYikgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQWxsb3dlZE1ldGhvZHNcXFwiLCBbXFxcIkdFVFxcXCIsIFxcXCJIRUFEXFxcIl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlZC1tZXRob2RzLXN1YnNldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2FjaGVkTWV0aG9kc1xcXCIsIFtiLnBhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZWRNZXRob2RzIGNvbnRhaW5zICVzLCB3aGljaCBpcyBub3QgaW4gQWxsb3dlZE1ldGhvZHMgJXZcXFwiLCBbbWV0aG9kLCBhbGxvd2VkXSksXFxuXFx0XFxcIkV2ZXJ5IG1ldGhvZCBpbiBDYWNoZWRNZXRob2RzIG11c3QgYWxzbyBhcHBlYXIgaW4gQWxsb3dlZE1ldGhvZHNcXFwiLFxcblxcdF9wZl9jZl9tZXRob2RzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRjYWNoZWQgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQ2FjaGVkTWV0aG9kc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoY2FjaGVkKVxcblxcdGFsbG93ZWQgOj0gX3BmX2NmX21ldGhvZHNfYWxsb3dlZChiKVxcblxcdGlzX2FycmF5KGFsbG93ZWQpXFxuXFx0c29tZSBtZXRob2QgaW4gY2FjaGVkXFxuXFx0bm90IG1ldGhvZCBpbiBhbGxvd2VkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBkaXN0cmlidXRpb24gbXVzdCBiZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fZml4IDo9IFxcXCJDcmVhdGUgdGhlIExhbWJkYUBFZGdlIGZ1bmN0aW9uIGluIHVzLWVhc3QtMSAoY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIGRvZXMgdGhpcyBmb3IgeW91KSBhbmQgYXNzb2NpYXRlIHRoYXQgdmVyc2lvbidzIEFSTlxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9sYW1iZGEtYXQtZWRnZS1mdW5jdGlvbi1yZXN0cmljdGlvbnMuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwifSB8XFxuXFx0XFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSl9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRfcGZfY2ZfZWRnZXJlZ2lvbl9maXgsIF9wZl9jZl9lZGdlcmVnaW9uX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gN1xcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImxhbWJkYVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGFzc29jaWF0aW9ucyBtdXN0IHJlZmVyZW5jZSBhIHZlcnNpb24gQVJOLCBub3QgYW4gYWxpYXMgb3IgJExBVEVTVFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfZWRnZXZlcl9maXggOj0gXFxcIkFzc29jaWF0ZSBhIHZlcnNpb24gQVJOIChpbiB0aGUgQ0RLLCBmbi5jdXJyZW50VmVyc2lvbi5lZGdlQXJuKSBpbnN0ZWFkIG9mIHRoZSB1bnF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGFuIGFsaWFzLCBvciAkTEFURVNUXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1sYW1iZGFmdW5jdGlvbmFzc29jaWF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG4jIExhbWJkYSBBUk5zIHNwbGl0IGludG8gNyBzZWdtZW50cyB3aGVuIHVucXVhbGlmaWVkXFxuIyAoYXJuOnBhcnRpdGlvbjpsYW1iZGE6cmVnaW9uOmFjY291bnQ6ZnVuY3Rpb246bmFtZSkgYW5kIDggd2hlbiBhIHZlcnNpb24gb3JcXG4jIGFsaWFzIHF1YWxpZmllciBpcyBhcHBlbmRlZC4gT25seSBhbiBhbGwtZGlnaXQgcXVhbGlmaWVyIGlzIGEgdmVyc2lvbi5cXG5fcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpIDo9IFt7XFxcInBhdGhcXFwiOiBwYXRoLCBcXFwiYXJuXFxcIjogYXJuLCBcXFwicGFydHNcXFwiOiBwYXJ0c30gfFxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXZlcl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cGFydHNbNV0gPT0gXFxcImZ1bmN0aW9uXFxcIlxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbnMuJWQuTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBbYi5wYXRoLCBhLmluZGV4XSlcXG5dXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0IHRoaXMgQVJOIGhhcyBubyBxdWFsaWZpZXJcXFwiLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDdcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIHJlcXVpcmVzIGEgdmVyc2lvbi1xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBidXQgJyVzJyBpcyBhbiBhbGlhcyBvciAkTEFURVNUXFxcIiwgW3F1YWxpZmllcl0pLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDhcXG5cXHRxdWFsaWZpZXIgOj0gaXQucGFydHNbN11cXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgcXVhbGlmaWVyKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9yaWdpbiBncm91cCBtZW1iZXJzIG11c3QgcmVmZXJlbmNlIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiB0aGUgZGlzdHJpYnV0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSkgOj0ge2lkIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luc1xcXCIpXFxuXFx0aWQgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaWQpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1vcmlnaW4tZ3JvdXAtbWVtYmVyLW9yaWdpblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luR3JvdXBzLkl0ZW1zLiVkLk1lbWJlcnNcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIk9yaWdpbiBncm91cCBtZW1iZXIgJyVzJyBkb2VzIG5vdCBtYXRjaCBhbnkgb3JpZ2luIElkIGluIHRoZSBkaXN0cmlidXRpb25cXFwiLCBbb2lkXSksXFxuXFx0XFxcIlBvaW50IGV2ZXJ5IG9yaWdpbiBncm91cCBtZW1iZXIgYXQgdGhlIElkIG9mIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiBPcmlnaW5zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vcmlnaW5ncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtc1xcXCIpXFxuXFx0bWVtYmVycyA6PSBvYmplY3QuZ2V0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIk1lbWJlcnNcXFwiLCB7fSksIFxcXCJJdGVtc1xcXCIsIFtdKVxcblxcdHNvbWUgbSBpbiBtZW1iZXJzXFxuXFx0b2lkIDo9IG9iamVjdC5nZXQobSwgXFxcIk9yaWdpbklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcob2lkKVxcblxcdG5vdCBvaWQgaW4gX3BmX2NmX29nbWVtYmVyX2lkcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBiZWhhdmlvciBUVExzIG11c3Qgc2F0aXNmeSBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX3R0bF9maXggOj0gXFxcIk9yZGVyIHRoZSBUVExzIGFzIE1pblRUTCA8PSBEZWZhdWx0VFRMIDw9IE1heFRUTFxcXCJcXG5cXG5fcGZfY2ZfdHRsX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIiwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSksIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heFRUTCAoJXYpXFxcIiwgW21uLCBteF0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC10dGwtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBiLnBhdGgsXFxuXFx0c3ByaW50ZihcXFwiTWluVFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRGVmYXVsdFRUTCAoJXYpXFxcIiwgW21uLCBkZl0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBkZlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIkRlZmF1bHRUVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFtkZiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bXggOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1heFRUTFxcXCIsIG51bGwpKVxcblxcdGRmID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBXQUZ2MiB3ZWIgQUNMIGF0dGFjaGVkIHRvIENsb3VkRnJvbnQgbXVzdCBiZSBnbG9iYWxseSBzY29wZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIFdBRnYyIEFSTiBjYXJyaWVzIGl0cyBzY29wZSBpbiB0aGUgcmVzb3VyY2Ugc2VnbWVudDpcXG4jICAgYXJuOmF3czp3YWZ2Mjp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmdsb2JhbC93ZWJhY2wvbmFtZS9pZCAgICAoQ0xPVURGUk9OVClcXG4jICAgYXJuOmF3czp3YWZ2MjphcC1ub3J0aGVhc3QtMToxMjM0NTY3ODkwMTI6cmVnaW9uYWwvd2ViYWNsLy4uLiAoUkVHSU9OQUwpXFxuIyBDbG91ZEZyb250IGFjY2VwdHMgb25seSB0aGUgZ2xvYmFsIGZvcm0uIENoZWNraW5nIHRoZSByZWdpb24gYWxvbmUgd291bGQgbWlzc1xcbiMgYSBSRUdJT05BTCB3ZWIgQUNMIHRoYXQgaGFwcGVucyB0byBoYXZlIGJlZW4gY3JlYXRlZCBpbiB1cy1lYXN0LTEsIHdoaWNoIGlzXFxuIyB0aGUgZWFzeSBtaXN0YWtlIHRvIG1ha2UuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IG9ubHkgYWNjZXB0cyBhIGdsb2JhbGx5IHNjb3BlZCB3ZWIgQUNMLCBidXQgdGhpcyBBUk4gaXMgc2NvcGVkICclcydcXFwiLCBbc2NvcGVdKSxcXG5cXHRcXFwiQ3JlYXRlIHRoZSB3ZWIgQUNMIHdpdGggc2NvcGUgQ0xPVURGUk9OVCBpbiB1cy1lYXN0LTEgKHdhZnYyLkNmbldlYkFDTCB3aXRoIHNjb3BlOiAnQ0xPVURGUk9OVCcpIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS13YWZ2Mi13ZWJhY2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuV2ViQUNMSWRcXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJ3YWZ2MlxcXCJcXG5cXHRzZWdtZW50cyA6PSBzcGxpdChwYXJ0c1s1XSwgXFxcIi9cXFwiKVxcblxcdHNjb3BlIDo9IHNlZ21lbnRzWzBdXFxuXFx0c2NvcGUgIT0gXFxcImdsb2JhbFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIFBlcmlvZCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIHZhbGlkIHZhbHVlcyBhcmVcXG4jIG9ubHkgaW4gdGhlIHNlcnZpY2UgKFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFwiKS5cXG4jIFRoZSBzYW1lIGNvbnN0cmFpbnQgYXBwbGllcyBpbnNpZGUgTWV0cmljU3RhdCAoYmVuY2ggdzExLCAyMDI2LTA5LTAzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tcGVyaW9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIlBlcmlvZCAldiBpcyBpbnZhbGlkOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJVc2UgMTAsIDIwLCAzMCwgb3IgYSBtdWx0aXBsZSBvZiA2MCBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QZXJpb2RcXFwiKSlcXG5cXHRub3QgcCBpbiB7MTAsIDIwLCAzMH1cXG5cXHRwICUgNjAgIT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tcGVyaW9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3MgKE1ldHJpY1N0YXQuUGVyaW9kIG9mIHF1ZXJ5ICVkKVxcXCIsIFtpXSksXFxuXFx0c3ByaW50ZihcXFwiTWV0cmljU3RhdCBQZXJpb2QgJXYgaXMgaW52YWxpZDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIDEwLCAyMCwgMzAsIG9yIGEgbXVsdGlwbGUgb2YgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIpXFxuXFx0aSA6PSBpdGVtLmluZGV4XFxuXFx0cSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHEpXFxuXFx0cCA6PSBvYmplY3QuZ2V0KHEsIFtcXFwiTWV0cmljU3RhdFxcXCIsIFxcXCJQZXJpb2RcXFwiXSwgbnVsbClcXG5cXHRpc19udW1iZXIocClcXG5cXHRub3QgcCBpbiB7MTAsIDIwLCAzMH1cXG5cXHRwICUgNjAgIT0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFuZGFyZCBvcGVyYXRvcnMgbmVlZCBUaHJlc2hvbGQsIHJhbmdlIG9wZXJhdG9ycyBuZWVkIFRocmVzaG9sZE1ldHJpY0lkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2N3YXRoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIlxcblxcbiMgVGhlIHR3byByYW5nZSBvcGVyYXRvcnMgYW5jaG9yIHRvIGFuIGFub21hbHktZGV0ZWN0aW9uIGJhbmQgdmlhXFxuIyBUaHJlc2hvbGRNZXRyaWNJZDsgZXZlcnkgb3RoZXIgb3BlcmF0b3IgbmVlZHMgYSBzdGF0aWMgVGhyZXNob2xkLiBBYnNlbmNlXFxuIyBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY3dhdGhfcmFuZ2Vfb3BzIDo9IHtcXFwiTGVzc1RoYW5Mb3dlck9yR3JlYXRlclRoYW5VcHBlclRocmVzaG9sZFxcXCIsIFxcXCJMZXNzVGhhbkxvd2VyVGhyZXNob2xkXFxcIiwgXFxcIkdyZWF0ZXJUaGFuVXBwZXJUaHJlc2hvbGRcXFwifVxcblxcbl9wZl9jd2F0aF9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRocmVzaG9sZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ29tcGFyaXNvbk9wZXJhdG9yICclcycgbmVlZHMgYSBzdGF0aWMgVGhyZXNob2xkIGJ1dCBub25lIGlzIHNldDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlB1dE1ldHJpY0FsYXJtIHJlcXVlc3Qgc2hvdWxkIGhhdmUgdmFsaWQgVGhyZXNob2xkIHBhcmFtZXRlclxcXFxcXFwiXFxcIiwgW29wXSksXFxuXFx0XFxcIlNldCBUaHJlc2hvbGQsIG9yIHN3aXRjaCB0byBhbiBhbm9tYWx5LWRldGVjdGlvbiBvcGVyYXRvciB3aXRoIFRocmVzaG9sZE1ldHJpY0lkXFxcIixcXG5cXHRfcGZfY3dhdGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRvcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXBhcmlzb25PcGVyYXRvclxcXCIpXFxuXFx0aXNfc3RyaW5nKG9wKVxcblxcdG5vdCBvcCBpbiBfcGZfY3dhdGhfcmFuZ2Vfb3BzXFxuXFx0X3BmX2N3YXRoX2Fic2VudChuYW1lLCBcXFwiVGhyZXNob2xkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXBhcmlzb25PcGVyYXRvciAnJXMnIGlzIGEgcmFuZ2Ugb3BlcmF0b3IgYnV0IFRocmVzaG9sZE1ldHJpY0lkIGlzIG5vdCBzZXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJDb21wYXJpc29uT3BlcmF0b3JzIGZvciByYW5nZXMgcmVxdWlyZSBUaHJlc2hvbGRNZXRyaWNJZCB0byBiZSBzZXRcXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJQb2ludCBUaHJlc2hvbGRNZXRyaWNJZCBhdCB0aGUgQU5PTUFMWV9ERVRFQ1RJT05fQkFORCBxdWVyeSBpZCwgb3IgdXNlIGEgc3RhdGljLXRocmVzaG9sZCBvcGVyYXRvclxcXCIsXFxuXFx0X3BmX2N3YXRoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0b3AgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wYXJpc29uT3BlcmF0b3JcXFwiKVxcblxcdG9wIGluIF9wZl9jd2F0aF9yYW5nZV9vcHNcXG5cXHRfcGZfY3dhdGhfYWJzZW50KG5hbWUsIFxcXCJUaHJlc2hvbGRNZXRyaWNJZFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1jb21wb3NpdGUtYWxhcm0tcnVsZS1zeW50YXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIEFsYXJtUnVsZSBtdXN0IHN0YXJ0IHdpdGggYSB2YWxpZCBleHByZXNzaW9uIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBuYW1lcyB0aGUgb25seSB0b2tlbnMgYSBydWxlIGV4cHJlc3Npb24gbWF5IHN0YXJ0IHdpdGg7IHRoaXNcXG4jIGNoZWNrcyBqdXN0IHRoYXQgZmlyc3QgdG9rZW4g4oCUIGEgZnVsbCBncmFtbWFyIGlzIG91dCBvZiBzY29wZS4gRnVuY3Rpb25cXG4jIHRva2VucyB0YWtlIGFuIGFyZ3VtZW50IGxpc3QsIGtleXdvcmRzIHN0YW5kIGFsb25lLlxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCIoXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiTk9UIFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk5PVChcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJBVF9MRUFTVFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHQgPT0gXFxcIlRSVUVcXFwiXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHQgPT0gXFxcIkZBTFNFXFxcIlxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJBTEFSTShcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJPSyhcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJJTlNVRkZJQ0lFTlRfREFUQShcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1jb21wb3NpdGUtYWxhcm0tcnVsZS1zeW50YXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsYXJtUnVsZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxhcm1SdWxlICclcycgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHZhbGlkIHRva2VuOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJFcnJvciBpbiBBbGFybVJ1bGUgW1Vuc3VwcG9ydGVkIHRva2VuIC4uLiBtdXN0IGJlOiAnKCcsICdOT1QnLCBBVF9MRUFTVCwgVFJVRSBvciBGQUxTRSwgQUxBUk0sIE9LLCBvciBJTlNVRkZJQ0lFTlRfREFUQV1cXFxcXFxcIlxcXCIsIFtleHByXSksXFxuXFx0XFxcIlN0YXJ0IHRoZSBydWxlIHdpdGggQUxBUk0oLi4uKSwgT0soLi4uKSwgSU5TVUZGSUNJRU5UX0RBVEEoLi4uKSwgTk9ULCBBVF9MRUFTVCwgVFJVRSwgRkFMU0UsIG9yIGEgcGFyZW50aGVzaXplZCBncm91cFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9tb25pdG9yaW5nL0NyZWF0ZV9Db21wb3NpdGVfQWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm1cXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGFybVJ1bGVcXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHQgIT0gXFxcIlxcXCJcXG5cXHRub3QgX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtYm9keS1qc29uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmRCb2R5IG11c3QgYmUgdmFsaWQgSlNPTlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLWJvZHktanNvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIsXFxuXFx0XFxcIkRhc2hib2FyZEJvZHkgZG9lcyBub3QgcGFyc2UgYXMgSlNPTjsgUHV0RGFzaGJvYXJkIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgZmllbGQgRGFzaGJvYXJkQm9keSBtdXN0IGJlIGEgdmFsaWQgSlNPTiBvYmplY3RcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkZpeCB0aGUgSlNPTiBzeW50YXggb2YgdGhlIGRhc2hib2FyZCBib2R5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9DbG91ZFdhdGNoLURhc2hib2FyZC1Cb2R5LVN0cnVjdHVyZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdGJvZHkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5XFxcIilcXG5cXHRpc19zdHJpbmcoYm9keSlcXG5cXHRub3QganNvbi5pc192YWxpZChib2R5KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRhc2hib2FyZCBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFeHRyYSBwYWluZnVsIGF0IGRlcGxveSB0aW1lOiB0aGUgaW52YWxpZCBuYW1lIGFsc28gYnJlYWtzIHRoZSByb2xsYmFja1xcbiMgREVMRVRFLCBsZWF2aW5nIHRoZSBzdGFjayBpbiBST0xMQkFDS19GQUlMRUQgKGJlbmNoZWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGFzaGJvYXJkTmFtZSAnJXMnIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczsgUHV0RGFzaGJvYXJkIGFsbG93cyBvbmx5IGFscGhhbnVtZXJpY3MsIGRhc2ggKC0pIGFuZCB1bmRlcnNjb3JlIChfKSwgYW5kIHRoZSBmYWlsZWQgc3RhY2sgY2Fubm90IGV2ZW4gcm9sbCBiYWNrIGNsZWFubHlcXFwiLCBbZG5dKSxcXG5cXHRcXFwiVXNlIG9ubHkgbGV0dGVycywgZGlnaXRzLCBkYXNoIGFuZCB1bmRlcnNjb3JlIGluIHRoZSBkYXNoYm9hcmQgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1B1dERhc2hib2FyZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdGRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTlfLV0rJGAsIGRuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1maWVsZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZXJ5IGRhc2hib2FyZCB3aWRnZXQgcmVxdWlyZXMgdHlwZSBhbmQgcHJvcGVydGllc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkga2V5IHByZXNlbmNlIGlzIGNoZWNrZWQ6IHRoZSBzZXJ2aWNlIGFjY2VwdHMgYXJiaXRyYXJ5IHR5cGUgdmFsdWVzXFxuIyAoYmVuY2ggZHcwNCwgdHlwZSBcXFwibWV0cmljY1xcXCIgZGVwbG95ZWQgY2xlYW4pLCBzbyBubyBlbnVtIHZhbGlkYXRpb24uXFxuX3BmX2N3ZHdmX3dpZGdldHMobmFtZSkgOj0gd3MgaWYge1xcblxcdGJvZHkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5XFxcIilcXG5cXHRpc19zdHJpbmcoYm9keSlcXG5cXHRqc29uLmlzX3ZhbGlkKGJvZHkpXFxuXFx0b2JqIDo9IGpzb24udW5tYXJzaGFsKGJvZHkpXFxuXFx0d3MgOj0gb2JqZWN0LmdldChvYmosIFxcXCJ3aWRnZXRzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkod3MpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0LWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5ICh3aWRnZXRzWyVkXSlcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIkRhc2hib2FyZCB3aWRnZXQgJWQgaXMgbWlzc2luZyAnJXMnOyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICclcydcXFxcXFxcIlxcXCIsIFtpLCBrZXksIGtleV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHdpZGdldCBhIHR5cGUgYW5kIGEgcHJvcGVydGllcyBvYmplY3RcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0c29tZSBpLCB3IGluIF9wZl9jd2R3Zl93aWRnZXRzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KHcpXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJ0eXBlXFxcIiwgXFxcInByb3BlcnRpZXNcXFwifVxcblxcdG9iamVjdC5nZXQodywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0LXBvc2l0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmQgd2lkZ2V0IHggdG9wcyBvdXQgYXQgMjMgYW5kIHdpZHRoIGF0IDI0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgdHdvIGJlbmNoZWQgbWF4aW1hIGFyZSBjbGFpbWVkICh4IDw9IDIzLCB3aWR0aCA8PSAyNCkuXFxuX3BmX2N3ZHdwX3dpZGdldHMobmFtZSkgOj0gd3MgaWYge1xcblxcdGJvZHkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5XFxcIilcXG5cXHRpc19zdHJpbmcoYm9keSlcXG5cXHRqc29uLmlzX3ZhbGlkKGJvZHkpXFxuXFx0b2JqIDo9IGpzb24udW5tYXJzaGFsKGJvZHkpXFxuXFx0d3MgOj0gb2JqZWN0LmdldChvYmosIFxcXCJ3aWRnZXRzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkod3MpXFxufVxcblxcbl9wZl9jd2R3cF9tYXggOj0ge1xcXCJ4XFxcIjogMjMsIFxcXCJ3aWR0aFxcXCI6IDI0fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0LXBvc2l0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHkgKHdpZGdldHNbJWRdLiVzKVxcXCIsIFtpLCBrZXldKSxcXG5cXHRzcHJpbnRmKFxcXCJEYXNoYm9hcmQgd2lkZ2V0ICVkIGhhcyAlcz0ldiwgYWJvdmUgdGhlIG1heGltdW0gJXY7IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiU2hvdWxkIGJlIDw9ICV2XFxcXFxcXCJcXFwiLCBbaSwga2V5LCB2LCBtLCBtXSksXFxuXFx0XFxcIktlZXAgeCB3aXRoaW4gMC0yMyBhbmQgd2lkdGggd2l0aGluIDEtMjQgKDI0LWNvbHVtbiBncmlkKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRzb21lIGksIHcgaW4gX3BmX2N3ZHdwX3dpZGdldHMobmFtZSlcXG5cXHRpc19vYmplY3QodylcXG5cXHRzb21lIGtleSwgbSBpbiBfcGZfY3dkd3BfbWF4XFxuXFx0diA6PSBvYmplY3QuZ2V0KHcsIGtleSwgMClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2ID4gbVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRhc2hib2FyZEJvZHkgcmVxdWlyZXMgYSB3aWRnZXRzIGFycmF5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0c1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIsXFxuXFx0XFxcIkRhc2hib2FyZEJvZHkgaGFzIG5vICd3aWRnZXRzJyBrZXk7IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiU2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJ3dpZGdldHMnXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSB3aWRnZXRzIGFycmF5IHRvIHRoZSBkYXNoYm9hcmQgYm9keVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdGlzX29iamVjdChvYmopXFxuXFx0b2JqZWN0LmdldChvYmosIFxcXCJ3aWRnZXRzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGF0YXBvaW50cy1ldmFsdWF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXRhcG9pbnRzVG9BbGFybSBtdXN0IG5vdCBleGNlZWQgRXZhbHVhdGlvblBlcmlvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGF0YXBvaW50cy1ldmFsdWF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EYXRhcG9pbnRzVG9BbGFybVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGF0YXBvaW50c1RvQWxhcm0gKCV2KSBleGNlZWRzIEV2YWx1YXRpb25QZXJpb2RzICgldik7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJEYXRhcG9pbnRzVG9BbGFybSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBFdmFsdWF0aW9uUGVyaW9kc1xcXFxcXFwiXFxcIiwgW2QsIGV2XSksXFxuXFx0XFxcIkxvd2VyIERhdGFwb2ludHNUb0FsYXJtIHRvIGF0IG1vc3QgRXZhbHVhdGlvblBlcmlvZHMsIG9yIHJhaXNlIEV2YWx1YXRpb25QZXJpb2RzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0ZCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXRhcG9pbnRzVG9BbGFybVxcXCIpKVxcblxcdGV2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2YWx1YXRpb25QZXJpb2RzXFxcIikpXFxuXFx0ZCA+IGV2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1leHRlbmRlZC1zdGF0aXN0aWNcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcGVyY2VudGlsZSBzdGF0aXN0aWMgY2Fubm90IGV4Y2VlZCBwMTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQZXJjZW50aWxlIHN0YXRpc3RpY3MgcnVuIHAwLjAgdG8gcDEwMC4gT25seSB0aGUgcE4gZm9ybSBpcyBjaGVja2VkOyBvdGhlclxcbiMgZXh0ZW5kZWQgZm9ybXMgKHRtLCB3bSwgdGMsIHRzLCAuLi4pIGhhdmUgdGhlaXIgb3duIGdyYW1tYXJzIGFuZCB3ZXJlIG5vdFxcbiMgbWVhc3VyZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWV4dGVuZGVkLXN0YXRpc3RpY1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTdGF0aXN0aWNcXFwiLFxcblxcdHNwcmludGYoXFxcIkV4dGVuZGVkU3RhdGlzdGljICclcycgaXMgYmV5b25kIHAxMDA7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgdmFsdWUgJXMgZm9yIHBhcmFtZXRlciBFeHRlbmRlZFN0YXRpc3RpYyBpcyBub3Qgc3VwcG9ydGVkLlxcXFxcXFwiXFxcIiwgW3MsIHNdKSxcXG5cXHRcXFwiVXNlIGEgcGVyY2VudGlsZSBiZXR3ZWVuIHAwLjAgYW5kIHAxMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9jbG91ZHdhdGNoX2NvbmNlcHRzLmh0bWwjUGVyY2VudGlsZXNcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTdGF0aXN0aWNcXFwiKVxcblxcdGlzX3N0cmluZyhzKVxcblxcdHN0YXJ0c3dpdGgocywgXFxcInBcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHN1YnN0cmluZyhzLCAxLCBjb3VudChzKSAtIDEpKVxcblxcdG4gPiAxMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1uYW1lc3BhY2UtYXNjaWlcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1ldHJpYyBuYW1lc3BhY2VzIG11c3Qgbm90IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLW5hbWVzcGFjZS1hc2NpaVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTmFtZXNwYWNlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOYW1lc3BhY2UgJyVzJyBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVyczsgQ2xvdWRXYXRjaCByZWplY3RzIHRoZSBhbGFybSB3aXRoIFxcXFxcXFwiTmFtZXNwYWNlIG11c3Qgbm90IGNvbnRhaW4gTm9uLUFTQ0lJIGNoYXJhY3RlcnMuXFxcXFxcXCJcXFwiLCBbbnNdKSxcXG5cXHRcXFwiVXNlIEFTQ0lJIG9ubHkgaW4gdGhlIG1ldHJpYyBuYW1lc3BhY2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXRNZXRyaWNBbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0bnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lc3BhY2VcXFwiKVxcblxcdGlzX3N0cmluZyhucylcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgwMC1cXFxceDdmXSokYCwgbnMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHByZXNzaW9uIGFuZCBNZXRyaWNTdGF0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUgcGVyIHF1ZXJ5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmUgcXVlcnkgZW50cnkgaXMgZWl0aGVyIGEgbWF0aCBleHByZXNzaW9uIG9yIGEgbWV0cmljIGZldGNoLCBuZXZlciBib3RoLlxcbiMgVGhlIHNwZWNpZnktbmVpdGhlciBzaGFwZSBmYWlscyB0b28sIGJ1dCB3aXRoIGFuIHVucmVsYXRlZCBlcnJvciAoXFxcIlBlcmlvZFxcbiMgbXVzdCBub3QgYmUgbnVsbFxcXCIsIGJlbmNoIHcwM2IpIOKAlCBzbyBvbmx5IHRoZSBib3RoLXNldCBkaXJlY3Rpb24gaXMgY2xhaW1lZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNzLiVkXFxcIiwgW3EuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJNZXRyaWMgcXVlcnkgJyVzJyBzZXRzIGJvdGggRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXJzIE1ldHJpY0RhdGFRdWVyeSBFeHByZXNzaW9uIGFuZCBNZXRyaWNTdGF0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIHlvdSBoYXZlIHNwZWNpZmllZCBib3RoLlxcXFxcXFwiXFxcIiwgW3FpZF0pLFxcblxcdFxcXCJLZWVwIHRoZSBFeHByZXNzaW9uIGFuZCBkcm9wIE1ldHJpY1N0YXQgKGZldGNoIHRoZSBpbnB1dHMgaW4gc2VwYXJhdGUgcXVlcmllcyksIG9yIHZpY2UgdmVyc2FcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3Vkd2F0Y2gtYWxhcm0tbWV0cmljZGF0YXF1ZXJ5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKVxcblxcdGlzX29iamVjdChxLnZhbHVlKVxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChxLnZhbHVlLCBcXFwiTWV0cmljU3RhdFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRxaWQgOj0gb2JqZWN0LmdldChxLnZhbHVlLCBcXFwiSWRcXFwiLCBcXFwiPHF1ZXJ5PlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhhY3RseSBvbmUgbWV0cmljIHF1ZXJ5IG11c3QgcmV0dXJuIGRhdGFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIGFsYXJtIG9uIGEgTWV0cmljcyBhcnJheSBuZWVkcyBleGFjdGx5IG9uZSBxdWVyeSByZXR1cm5pbmcgZGF0YS5cXG4jIFJldHVybkRhdGEgZGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIGFic2VudCAoYmVuY2ggdzA0YiksIGFuZCBleHBsaWNpdCBmYWxzZVxcbiMgZXZlcnl3aGVyZSBpcyByZWplY3RlZCB0b28gKHcwNGMpLiBBIHF1ZXJ5IHdob3NlIFJldHVybkRhdGEgaXMgYW5cXG4jIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgbWFrZXMgdGhlIGNvdW50IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9jd21xcl9jb3VudGFibGUocSkgaWYgb2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIGlzX2Jvb2xlYW4ob2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIG51bGwpKVxcblxcbl9wZl9jd21xcl9yZXR1cm5zKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCB0cnVlKSA9PSB0cnVlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1yZXR1cm5kYXRhXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCBvZiB0aGUgbWV0cmljIHF1ZXJpZXMgcmV0dXJuIGRhdGEgKFJldHVybkRhdGEgZGVmYXVsdHMgdG8gdHJ1ZSk7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJFeGFjdGx5IG9uZSBlbGVtZW50IG9mIHRoZSBtZXRyaWNzIGxpc3Qgc2hvdWxkIHJldHVybiBkYXRhLlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFJldHVybkRhdGE6IGZhbHNlIG9uIGV2ZXJ5IHF1ZXJ5IGV4Y2VwdCB0aGUgb25lIHRoZSBhbGFybSBzaG91bGQgd2F0Y2hcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3Vkd2F0Y2gtYWxhcm0tbWV0cmljZGF0YXF1ZXJ5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRpdGVtcyA6PSBbcSB8IHNvbWUgcSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBxIGluIGl0ZW1zIHtcXG5cXHRcXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRcXHRfcGZfY3dtcXJfY291bnRhYmxlKHEudmFsdWUpXFxuXFx0fVxcblxcdG4gOj0gY291bnQoW3EgfCBzb21lIHEgaW4gaXRlbXM7IF9wZl9jd21xcl9yZXR1cm5zKHEudmFsdWUpXSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLXRocmVzaG9sZC1tZXRyaWMtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRocmVzaG9sZE1ldHJpY0lkIG11c3QgbWF0Y2ggYSBtZXRyaWMgcXVlcnkgdGhhdCByZXR1cm5zIGRhdGFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1hdGNoaW5nIG1lYW5zIElkIGVxdWFsaXR5IEFORCBlZmZlY3RpdmUgUmV0dXJuRGF0YSB0cnVlIChkZWZhdWx0IHRydWUsXFxuIyBiZW5jaCB3MDRiKTsgdzEyIHByb3ZlZCBhbiBJZCBtYXRjaCB3aXRoIFJldHVybkRhdGEgZmFsc2UgZG9lcyBub3QgY291bnQuXFxuIyBPbmx5IG4gPT0gMCBmaXJlcyAtIHRoZSBkdXBsaWNhdGUtbWF0Y2ggc2lkZSBpcyB1bmJlbmNoZWQuIFF1ZXJpZXMgd2l0aFxcbiMgdW5yZXNvbHZhYmxlIElkL1JldHVybkRhdGEgbWFrZSB0aGUgY291bnQgdW5rbm93YWJsZSwgc28gdGhlIHJ1bGUgc2tpcHMuXFxuX3BmX2N3dG1pX2NvdW50YWJsZShxKSBpZiBvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcbl9wZl9jd3RtaV9jb3VudGFibGUocSkgaWYgaXNfYm9vbGVhbihvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgbnVsbCkpXFxuXFxuX3BmX2N3dG1pX21hdGNoZXMocSwgdG1pZCkgaWYge1xcblxcdG9iamVjdC5nZXQocSwgXFxcIklkXFxcIiwgbnVsbCkgPT0gdG1pZFxcblxcdG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCB0cnVlKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC10aHJlc2hvbGQtbWV0cmljLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRNZXRyaWNJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTm8gbWV0cmljIHF1ZXJ5IHdpdGggSWQgJyVzJyByZXR1cm5zIGRhdGE7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJNZXRyaWNzIGxpc3QgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIG1ldHJpYyBtYXRjaGluZyB0aGUgVGhyZXNob2xkTWV0cmljSWQgcGFyYW1ldGVyXFxcXFxcXCJcXFwiLCBbdG1pZF0pLFxcblxcdFxcXCJQb2ludCBUaHJlc2hvbGRNZXRyaWNJZCBhdCBhIHF1ZXJ5IHdob3NlIFJldHVybkRhdGEgaXMgdHJ1ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHRtaWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRNZXRyaWNJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHRtaWQpXFxuXFx0aXRlbXMgOj0gW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgcSBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfb2JqZWN0KHEudmFsdWUpXFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIklkXFxcIiwgbnVsbCkpXFxuXFx0XFx0X3BmX2N3dG1pX2NvdW50YWJsZShxLnZhbHVlKVxcblxcdH1cXG5cXHRjb3VudChbcSB8IHNvbWUgcSBpbiBpdGVtczsgX3BmX2N3dG1pX21hdGNoZXMocS52YWx1ZSwgdG1pZCldKSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1hbGlhcy11c2VybmFtZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFsaWFzQXR0cmlidXRlcyBhbmQgVXNlcm5hbWVBdHRyaWJ1dGVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEtleSBwcmVzZW5jZSBpcyB0aGUgdmlvbGF0aW9uIHJlZ2FyZGxlc3Mgb2YgdmFsdWVzLCBzbyB0aGlzIGNoZWNrcyB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCBkaXJlY3RseSAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ2F1ZV9zZXQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1hbGlhcy11c2VybmFtZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlVzZXJuYW1lQXR0cmlidXRlc1xcXCIsXFxuXFx0XFxcIkJvdGggQWxpYXNBdHRyaWJ1dGVzIGFuZCBVc2VybmFtZUF0dHJpYnV0ZXMgYXJlIHNldDsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJPbmx5IG9uZSBvZiB0aGUgYWxpYXNBdHRyaWJ1dGVzIG9yIHVzZXJuYW1lQXR0cmlidXRlcyBjYW4gYmUgc2V0IGluIGEgVXNlciBwb29sLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiS2VlcCBvbmU6IGFsaWFzZXMgZm9yIHNpZ24taW4gYWx0ZXJuYXRpdmVzLCBvciB1c2VybmFtZSBhdHRyaWJ1dGVzIHRvIHJlcGxhY2UgdXNlcm5hbWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0X3BmX2NvZ2F1ZV9zZXQobmFtZSwgXFxcIkFsaWFzQXR0cmlidXRlc1xcXCIpXFxuXFx0X3BmX2NvZ2F1ZV9zZXQobmFtZSwgXFxcIlVzZXJuYW1lQXR0cmlidXRlc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjbGllbnRfY3JlZGVudGlhbHMgY2Fubm90IGNvbWJpbmUgd2l0aCBjb2RlIG9yIGltcGxpY2l0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYWNoaW5lLXRvLW1hY2hpbmUgYW5kIHVzZXItZmFjaW5nIGdyYW50cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9uIG9uZVxcbiMgY2xpZW50Llxcbl9wZl9jb2djY2VfZmxvd3MobmFtZSkgOj0ge2YudmFsdWUgfCBzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIil9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93cyBjb21iaW5lcyBjbGllbnRfY3JlZGVudGlhbHMgd2l0aCAnJXMnOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cgY2FuIG5vdCBiZSBzZWxlY3RlZCBhbG9uZyB3aXRoIGNvZGUgZmxvdyBvciBpbXBsaWNpdCBmbG93LlxcXFxcXFwiXFxcIiwgW290aGVyXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBmbG93cyBhY3Jvc3Mgc2VwYXJhdGUgdXNlciBwb29sIGNsaWVudHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRmbG93cyA6PSBfcGZfY29nY2NlX2Zsb3dzKG5hbWUpXFxuXFx0XFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCIgaW4gZmxvd3NcXG5cXHRzb21lIG90aGVyIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0b3RoZXIgaW4gZmxvd3NcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1zZWNyZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImNsaWVudF9jcmVkZW50aWFscyBuZWVkcyBhIGNsaWVudCBzZWNyZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1hY2hpbmUtdG8tbWFjaGluZSBhdXRoIGlzIHNlY3JldC1iYXNlZC4gR2VuZXJhdGVTZWNyZXQgZGVmYXVsdHMgdG9cXG4jIGZhbHNlLCBzbyBib3RoIHRoZSBsaXRlcmFsIGZhbHNlIGFuZCB0aGUgYWJzZW50IGtleSBsZWF2ZSB0aGUgY2xpZW50XFxuIyBzZWNyZXRsZXNzLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZVxcbiMgQUdFTlRTLm1kKS5cXG5fcGZfY29nY2NzX25vX3NlY3JldChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkdlbmVyYXRlU2VjcmV0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29nY2NzX25vX3NlY3JldChuYW1lKSBpZiBjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdlbmVyYXRlU2VjcmV0XFxcIikpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1zZWNyZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkdlbmVyYXRlU2VjcmV0XFxcIixcXG5cXHRcXFwiY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cgb24gYSBjbGllbnQgd2l0aG91dCBhIHNlY3JldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IGNhbiBub3QgYmUgc2VsZWN0ZWQgaWYgY2xpZW50IGRvZXMgbm90IGhhdmUgYSBjbGllbnQgc2VjcmV0LlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEdlbmVyYXRlU2VjcmV0OiB0cnVlIG9uIHRoaXMgY2xpZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0c29tZSBmIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIpXFxuXFx0Zi52YWx1ZSA9PSBcXFwiY2xpZW50X2NyZWRlbnRpYWxzXFxcIlxcblxcdF9wZl9jb2djY3Nfbm9fc2VjcmV0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVXNlciBwb29sIGNsaWVudCBuYW1lcyBhbGxvdyBvbmx5IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArPSwuQC1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tY2xpZW50LW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNsaWVudE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNsaWVudE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8tdXNlci1pZGVudGl0eS1wb29scy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVVc2VyUG9vbENsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNsaWVudE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTlfIFxcXFx0Kz0sLkAtXSskYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWRvbWFpbi1yZXNlcnZlZC13b3JkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEb21haW4gcHJlZml4ZXMgY2Fubm90IGNvbnRhaW4gcmVzZXJ2ZWQgd29yZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIHJlZnVzZXMgcHJlZml4ZXMgd2l0aCBhIHJlc2VydmVkIHdvcmQgYXMgYSBoeXBoZW4tZGVsaW1pdGVkXFxuIyB0b2tlbiwgd2l0aCBvbmx5IGEgZ2VuZXJpYyBlcnJvci4gUGlubmVkIGJ5IGNvbnRyb2xsZWQgcGFpcnM6IC1hd3MtIC9cXG4jIC1hbWF6b24tIC8gLWNvZ25pdG8tIGZhaWwgd2hpbGUgLWF3c29tZS0gZGVwbG95cyAoYmVuY2ggYzA3LWMwN2UpLCBzb1xcbiMgYSB0b2tlbiBtZXJlbHkgY29udGFpbmluZyBhIHdvcmQgc3RheXMgbGVnYWwuXFxuX3BmX2NvZ2Ryd193b3JkcyA6PSB7XFxcImF3c1xcXCIsIFxcXCJhbWF6b25cXFwiLCBcXFwiY29nbml0b1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWRvbWFpbi1yZXNlcnZlZC13b3JkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Eb21haW5cXFwiLFxcblxcdHNwcmludGYoXFxcIkRvbWFpbiBwcmVmaXggJyVzJyBoYXMgdGhlIHJlc2VydmVkIHdvcmQgJyVzJyBhcyBhIHNlZ21lbnQ7IHRoZSBkb21haW4gY3JlYXRlIGZhaWxzIHdpdGggdGhlIGdlbmVyaWMgXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IEFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cXFxcXFxcIlxcXCIsIFtkLCB3XSksXFxuXFx0XFxcIlJlbmFtZSBvciBtZXJnZSB0aGF0IHNlZ21lbnQgKGUuZy4gbXlhcHAtYXV0aCk7IHdvcmRzIG1lcmVseSBpbnNpZGUgYSBsb25nZXIgc2VnbWVudCBhcmUgZmluZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jb2duaXRvLXVzZXItcG9vbHMtYXNzaWduLWRvbWFpbi1wcmVmaXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cXFwiKVxcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Eb21haW5cXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdHNvbWUgdyBpbiBfcGZfY29nZHJ3X3dvcmRzXFxuXFx0dyBpbiBzcGxpdChkLCBcXFwiLVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1tZmEtc21zLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTUZBIHdpdGhvdXQgYW55IGZhY3RvciBjb25maWd1cmF0aW9uIGNhbm5vdCBkZXBsb3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdpdGggTUZBIG9uIGFuZCBubyBFbmFibGVkTWZhcywgQ29nbml0byBmYWxscyBiYWNrIHRvIFNNUyBNRkEsIHdoaWNoXFxuIyBuZWVkcyBTbXNDb25maWd1cmF0aW9uLiBBIHBvb2wgZGVjbGFyaW5nIEVuYWJsZWRNZmFzIChlLmcuIFRPVFAgb25seSxcXG4jIGJlbmNoIGMwNWIpIGlzIHZhbGlkIHdpdGhvdXQgU01TLCBzbyBpdHMgcHJlc2VuY2UgbXV0ZXMgdGhlIHJ1bGUuXFxuIyBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1mYUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIk1mYUNvbmZpZ3VyYXRpb24gJyVzJyB3aXRoIG5vIFNtc0NvbmZpZ3VyYXRpb24gYW5kIG5vIEVuYWJsZWRNZmFzOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlNNUyBjb25maWd1cmF0aW9uIGFuZCBBdXRvIHZlcmlmaWNhdGlvbiBmb3IgcGhvbmVfbnVtYmVyIGFyZSByZXF1aXJlZCB3aGVuIE1GQSBpcyByZXF1aXJlZC9vcHRpb25hbFxcXFxcXFwiXFxcIiwgW21mYV0pLFxcblxcdFxcXCJDb25maWd1cmUgU21zQ29uZmlndXJhdGlvbiAoU01TIE1GQSksIG9yIHBpY2sgZmFjdG9ycyB2aWEgRW5hYmxlZE1mYXMgKGUuZy4gU09GVFdBUkVfVE9LRU5fTUZBKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdG1mYSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1mYUNvbmZpZ3VyYXRpb25cXFwiKVxcblxcdG1mYSBpbiB7XFxcIk9OXFxcIiwgXFxcIk9QVElPTkFMXFxcIn1cXG5cXHRfcGZfY29nbXNjX2Fic2VudChuYW1lLCBcXFwiU21zQ29uZmlndXJhdGlvblxcXCIpXFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIkVuYWJsZWRNZmFzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjb2RlIGFuZCBpbXBsaWNpdCBPQXV0aCBmbG93cyBuZWVkIENhbGxiYWNrVVJMc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3QtYmFzZWQgZmxvd3MgbmVlZCBzb21ld2hlcmUgdG8gcmVkaXJlY3QgdG8uIEFic2VuY2UgaXMgcHJvdmVuXFxuIyBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dvY3JfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtY2FsbGJhY2stcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNhbGxiYWNrVVJMc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3MgaGFzICclcycgYnV0IENhbGxiYWNrVVJMcyBpcyBub3Qgc2V0OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQ2FsbGJhY2tVcmxzIGNhbiBub3QgYmUgZW1wdHkgd2hlbiBjb2RlIGZsb3cgb3IgaW1wbGljaXQgZmxvdyBpcyBzZWxlY3RlZFxcXFxcXFwiXFxcIiwgW2YudmFsdWVdKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBjYWxsYmFjayBVUkxcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiKSkgPT0gdHJ1ZVxcblxcdHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcblxcdGYudmFsdWUgaW4ge1xcXCJjb2RlXFxcIiwgXFxcImltcGxpY2l0XFxcIn1cXG5cXHRfcGZfY29nb2NyX2Fic2VudChuYW1lLCBcXFwiQ2FsbGJhY2tVUkxzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLW9hdXRoLWZsb3dzLXNjb3Blcy1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5hYmxpbmcgT0F1dGggcmVxdWlyZXMgYm90aCBBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGRpcmVjdGlvbnMgZGVwbG95LXZlcmlmaWVkLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2ZzX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ29mc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29nb2ZzX21zZyA6PSBcXFwidGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGFuZCBBbGxvd2VkT0F1dGhTY29wZXMgYXJlIHJlcXVpcmVkIGlmIHVzZXIgcG9vbCBjbGllbnQgaXMgYWxsb3dlZCB0byB1c2UgT0F1dGggZmxvd3MuXFxcXFxcXCJcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWZsb3dzLXNjb3Blcy1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoRmxvd3MgaXMgbm90IHNldDsgJXNcXFwiLCBbX3BmX2NvZ29mc19tc2ddKSxcXG5cXHRcXFwiU2V0IEFsbG93ZWRPQXV0aEZsb3dzLCBvciBkcm9wIEFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiLFxcblxcdF9wZl9jb2dvZnNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiKSkgPT0gdHJ1ZVxcblxcdF9wZl9jb2dvZnNfYWJzZW50KG5hbWUsIFxcXCJBbGxvd2VkT0F1dGhGbG93c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudCBpcyB0cnVlIGJ1dCBBbGxvd2VkT0F1dGhTY29wZXMgaXMgbm90IHNldDsgJXNcXFwiLCBbX3BmX2NvZ29mc19tc2ddKSxcXG5cXHRcXFwiU2V0IEFsbG93ZWRPQXV0aFNjb3Blcywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoU2NvcGVzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBhc3N3b3JkUG9saWN5IE1pbmltdW1MZW5ndGggcnVucyA2IHRvIDk5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIE1pbmltdW1MZW5ndGggYXMgYSBiYXJlIGludGVnZXI7IGJvdGggYm91bmRzXFxuIyBhcmUgZGVwbG95LXZlcmlmaWVkLlxcbl9wZl9jb2dwbWxfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNvZ25pdG8tdXNlcnBvb2wtcGFzc3dvcmRwb2xpY3kuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyB1bmRlciB0aGUgZmxvb3I7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNlxcXFxcXFwiXFxcIiwgW21sXSksXFxuXFx0XFxcIlVzZSBhIG1pbmltdW0gcGFzc3dvcmQgbGVuZ3RoIGJldHdlZW4gNiBhbmQgOTlcXFwiLFxcblxcdF9wZl9jb2dwbWxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtbCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIikpXFxuXFx0bWwgPCA2XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5pbXVtTGVuZ3RoICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA5OVxcXFxcXFwiXFxcIiwgW21sXSksXFxuXFx0XFxcIlVzZSBhIG1pbmltdW0gcGFzc3dvcmQgbGVuZ3RoIGJldHdlZW4gNiBhbmQgOTlcXFwiLFxcblxcdF9wZl9jb2dwbWxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtbCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIikpXFxuXFx0bWwgPiA5OVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tcmVjb3ZlcnktZHVwbGljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZWNvdmVyeSBtZWNoYW5pc21zIGNhbm5vdCByZXBlYXQgcHJpb3JpdGllcyBvciBuYW1lc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGFpcndpc2UgZHVwbGljYXRlIGNoZWNrIG9uIHRoZSBtZWNoYW5pc20gbGlzdDsgdGhlIHNlcnZpY2UgZXJyb3IgbmFtZXNcXG4jIGJvdGggZHVwbGljYXRlIHByaW9yaXRpZXMgYW5kIGR1cGxpY2F0ZSBtZWNoYW5pc20gbmFtZXMuXFxuX3BmX2NvZ3JkcF9kdXAoYSwgYikgaWYge1xcblxcdHBhIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGEsIFxcXCJQcmlvcml0eVxcXCIsIC0xKSlcXG5cXHRwYiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLCBcXFwiUHJpb3JpdHlcXFwiLCAtMikpXFxuXFx0cGEgPT0gcGJcXG59XFxuXFxuX3BmX2NvZ3JkcF9kdXAoYSwgYikgaWYge1xcblxcdG4gOj0gb2JqZWN0LmdldChhLCBcXFwiTmFtZVxcXCIsIFxcXCJfX3BmX2FcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG4gPT0gb2JqZWN0LmdldChiLCBcXFwiTmFtZVxcXCIsIFxcXCJfX3BmX2JcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcmVjb3ZlcnktZHVwbGljYXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zLiVkXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRcXFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyByZXBlYXQgYSBwcmlvcml0eSBvciBuYW1lOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY291bnQgUmVjb3ZlcnkgU2V0dGluZyBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgcHJpb3JpdGllcyBvciByZWNvdmVyeSBtZWNoYW5pc21zLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiR2l2ZSBlYWNoIHJlY292ZXJ5IG1lY2hhbmlzbSBhIGRpc3RpbmN0IHByaW9yaXR5IGFuZCBuYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXJlY292ZXJ5b3B0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGlzX29iamVjdChhLnZhbHVlKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdF9wZl9jb2dyZHBfZHVwKGEudmFsdWUsIGIudmFsdWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1zY2hlbWEtYXR0ci1sZW5ndGgtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNjaGVtYSBhdHRyaWJ1dGUgTWF4TGVuZ3RoIGNhbm5vdCB1bmRlcmN1dCBNaW5MZW5ndGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBjb25zdHJhaW50cyBhcmUgdHlwZWQgYXMgc3RyaW5ncywgc28gbm8gc2NoZW1hIGxheWVyIGNhbiBjb21wYXJlXFxuIyB0aGVtIG51bWVyaWNhbGx5LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1zY2hlbWEtYXR0ci1sZW5ndGgtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuU2NoZW1hLiVkLlN0cmluZ0F0dHJpYnV0ZUNvbnN0cmFpbnRzXFxcIiwgW2F0dC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGhhcyBNaW5MZW5ndGggJXYgb3ZlciBNYXhMZW5ndGggJXY7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiY2Fubm90IGhhdmUgYSBtYXggbGVuZ3RoIHNob3J0ZXIgdGhhbiBpdCdzIG1pbiBsZW5ndGhcXFxcXFxcIlxcXCIsIFtvYmplY3QuZ2V0KGF0dC52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPGF0dHI+XFxcIiksIG1uLCBteF0pLFxcblxcdFxcXCJLZWVwIE1pbkxlbmd0aCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4TGVuZ3RoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXNjaGVtYWF0dHJpYnV0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhdHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVtYVxcXCIpXFxuXFx0aXNfb2JqZWN0KGF0dC52YWx1ZSlcXG5cXHRzYWMgOj0gb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJTdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzYWMpXFxuXFx0bW5fcmF3IDo9IG9iamVjdC5nZXQoc2FjLCBcXFwiTWluTGVuZ3RoXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRtbl9yYXcgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG14X3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1heExlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bXhfcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRtbiA6PSB0b19udW1iZXIobW5fcmF3KVxcblxcdG14IDo9IHRvX251bWJlcihteF9yYXcpXFxuXFx0bW4gPiBteFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tdG9rZW4tZXhwaXJhdGlvbi1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWNjZXNzIGFuZCBpZCB0b2tlbnMgY2Fubm90IG91dGxpdmUgdGhlIHJlZnJlc2ggdG9rZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENyb3NzLXByb3BlcnR5IGluZXF1YWxpdHkgYmV0d2VlbiBkaWZmZXJlbnRseS11bml0ZWQgZHVyYXRpb25zIC0gb25seVxcbiMgY29tcGFyYWJsZSBhZnRlciBub3JtYWxpemluZyB0byBzZWNvbmRzLiBVbml0IGRlZmF1bHRzIGFyZSB0aGVcXG4jIGRlcGxveS12ZXJpZmllZCBob3Vycy9ob3Vycy9kYXlzLlxcbl9wZl9jb2d0ZW9fdW5pdF9zZWNzIDo9IHtcXFwic2Vjb25kc1xcXCI6IDEsIFxcXCJtaW51dGVzXFxcIjogNjAsIFxcXCJob3Vyc1xcXCI6IDM2MDAsIFxcXCJkYXlzXFxcIjogODY0MDB9XFxuXFxuX3BmX2NvZ3Rlb191bml0KG5hbWUsIHVuaXRLZXksIF8pIDo9IHUgaWYge1xcblxcdHUgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRva2VuVmFsaWRpdHlVbml0cy4lc1xcXCIsIFt1bml0S2V5XSkpXFxuXFx0aXNfc3RyaW5nKHUpXFxufVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBkZWZVbml0KSA6PSBkZWZVbml0IGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0dnUgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlRva2VuVmFsaWRpdHlVbml0c1xcXCIsIHt9KVxcblxcdGlzX29iamVjdCh0dnUpXFxuXFx0b2JqZWN0LmdldCh0dnUsIHVuaXRLZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIHZhbEtleSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gcyBpZiB7XFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3ZhbEtleV0pKSlcXG5cXHR1IDo9IF9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBkZWZVbml0KVxcblxcdHMgOj0gdiAqIF9wZl9jb2d0ZW9fdW5pdF9zZWNzW3VdXFxufVxcblxcbl9wZl9jb2d0ZW9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkFjY2VzcyB0b2tlbiB2YWxpZGl0eSAoJXYgcykgZXhjZWVkcyByZWZyZXNoIHRva2VuIHZhbGlkaXR5ICgldiBzKTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBhbmQgSWQgVG9rZW4gZXhwaXJhdGlvbiB0aW1lcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWZyZXNoIHRva2VuIGV4cGlyYXRpb24gdGltZXMuXFxcXFxcXCJcXFwiLCBbYSwgcl0pLFxcblxcdFxcXCJTaG9ydGVuIHRoZSBhY2Nlc3MgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRhIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiQWNjZXNzVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJBY2Nlc3NUb2tlblxcXCIsIFxcXCJob3Vyc1xcXCIpXFxuXFx0ciA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIiwgXFxcIlJlZnJlc2hUb2tlblxcXCIsIFxcXCJkYXlzXFxcIilcXG5cXHRhID4gclxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tZXhwaXJhdGlvbi1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJZCB0b2tlbiB2YWxpZGl0eSAoJXYgcykgZXhjZWVkcyByZWZyZXNoIHRva2VuIHZhbGlkaXR5ICgldiBzKTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBhbmQgSWQgVG9rZW4gZXhwaXJhdGlvbiB0aW1lcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWZyZXNoIHRva2VuIGV4cGlyYXRpb24gdGltZXMuXFxcXFxcXCJcXFwiLCBbaSwgcl0pLFxcblxcdFxcXCJTaG9ydGVuIHRoZSBpZCB0b2tlbiB2YWxpZGl0eSBvciBsZW5ndGhlbiB0aGUgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eVxcXCIsXFxuXFx0X3BmX2NvZ3Rlb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGkgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJJZFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiSWRUb2tlblxcXCIsIFxcXCJob3Vyc1xcXCIpXFxuXFx0ciA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIiwgXFxcIlJlZnJlc2hUb2tlblxcXCIsIFxcXCJkYXlzXFxcIilcXG5cXHRpID4gclxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRva2VuIHZhbGlkaXR5IHJhbmdlcyBkZXBlbmQgb24gdG9rZW4gdHlwZSBhbmQgdW5pdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSB0eXBlcyB0aGUgdmFsaWRpdGllcyBhcyBiYXJlIGludGVnZXJzOyB0aGUgcmVhbCByYW5nZXMgYXJlXFxuIyBwZXIgdG9rZW4gdHlwZSBBTkQgdW5pdCAoYWNjZXNzL2lkOiA1IG1pbnV0ZXMtMSBkYXksIHJlZnJlc2g6IDYwXFxuIyBtaW51dGVzLTEwIHllYXJzKS4gVW5pdCBkZWZhdWx0cyAoaG91cnMvaG91cnMvZGF5cykgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ndHZyX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0dnJfdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0dnJfc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndHZyX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndHZyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbl9wZl9jb2d0dnJfYWlfYmFkKHMpIGlmIHMgPCAzMDBcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzID4gODY0MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzIDwgMzYwMFxcblxcbl9wZl9jb2d0dnJfcnRfYmFkKHMpIGlmIHMgPiAzMTUzNjAwMDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHkgd29ya3Mgb3V0IHRvICV2IHNlY29uZHMsIG91dHNpZGUgNSBtaW51dGVzLTEgZGF5OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSBhY2Nlc3MgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdF9wZl9jb2d0dnJfYWlfYmFkKHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi12YWxpZGl0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJZFRva2VuVmFsaWRpdHkgd29ya3Mgb3V0IHRvICV2IHNlY29uZHMsIG91dHNpZGUgNSBtaW51dGVzLTEgZGF5OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSBpZCB0b2tlbiB2YWxpZGl0eSBiZXR3ZWVuIDUgbWludXRlcyBhbmQgMSBkYXlcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdF9wZl9jb2d0dnJfYWlfYmFkKHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi12YWxpZGl0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDYwIG1pbnV0ZXMtMTAgeWVhcnM7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJhbmdlIGZvciB0b2tlbiB2YWxpZGl0eS5cXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIktlZXAgdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA2MCBtaW51dGVzIGFuZCAxMCB5ZWFyc1xcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0X3BmX2NvZ3R2cl9ydF9iYWQocylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXVzZXItcG9vbC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJVc2VyIHBvb2wgbmFtZXMgYWxsb3cgb25seSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKz0sLkAtXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXVzZXItcG9vbC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Vc2VyUG9vbE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlVzZXJQb29sTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKyA9ICwgLiBAIC1cXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKyA9ICwgLiBAIC1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by11c2VyLWlkZW50aXR5LXBvb2xzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVVzZXJQb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVXNlclBvb2xOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XyBcXFxcdCs9LC5ALV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZSB1c2VkIGJ5IGEga2V5IHNjaGVtYVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoOiBldmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlXFxuIyB1c2VkIGJ5IHRoZSB0YWJsZSBrZXkgc2NoZW1hIG9yIGFuIGluZGV4IGtleSBzY2hlbWEuIFRoZSBlbmdpbmUncyBFMzAzOVxcbiMgY2hlY2tzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb25seSAoa2V5IGF0dHJpYnV0ZSBub3QgZGVmaW5lZCksIHNvIHRoZVxcbiMgY2xhc3NpYyBcXFwicmVtb3ZlZCBhIEdTSSwgbGVmdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25cXFwiIG1pc3Rha2Ugc2FpbHMgdGhyb3VnaC5cXG5cXG5fcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBwcm9wKSA6PSB7YSB8XFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VzZWQobmFtZSkgOj0gKChfcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSlcXG5cXG4jIEFueSB1bnJlc29sdmFibGUgQXR0cmlidXRlTmFtZSBpbiBhIGtleSBzY2hlbWEgbWVhbnMgdGhlIHVzZWQtc2V0IGlzXFxuIyBpbmNvbXBsZXRlLCBzbyB0aGUgcnVsZSBtdXN0IHN0YXkgc2lsZW50IHJhdGhlciB0aGFuIGd1ZXNzLlxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgaXMgZGVmaW5lZCBidXQgdXNlZCBieSBubyBrZXkgc2NoZW1hOyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaCBhbmQgZmFpbHMgd2l0aCBcXFxcXFxcIk51bWJlciBvZiBhdHRyaWJ1dGVzIGluIEtleVNjaGVtYSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIG51bWJlciBvZiBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgdW51c2VkIGRlZmluaXRpb24gKG5vbi1rZXkgYXR0cmlidXRlcyBzdWNoIGFzIGEgVFRMIGF0dHJpYnV0ZSBtdXN0IE5PVCBiZSBkZWNsYXJlZCksIG9yIGFkZCB0aGUgaW5kZXggdGhhdCB1c2VzIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRub3QgX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJhZHVfdXNlZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIEJpbGxpbmdNb2RlIChyZXF1aXJlZCBmb3IgUFJPVklTSU9ORUQsIGZvcmJpZGRlbiBmb3IgUEFZX1BFUl9SRVFVRVNUKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuX3BmX2RkYmJ0X2hhc19wdChuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiKSlcXG5cXG5fcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbiMgQmlsbGluZ01vZGUg44GM44Oq44OG44Op44OrIFxcXCJQUk9WSVNJT05FRFxcXCLjgIHjgb7jgZ/jga/mnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggUFJPVklTSU9ORUTvvInjgIJcXG4jIOODiOODvOOCr+ODs+WApO+8iFJlZiDnrYnvvInjga/liKTlrprjgavkvb/jgo/jgarjgYTvvIjoqqTmpJznn6XpmLLmraLvvInjgIJcXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBzcGVjaWZpZWQgd2hlbiBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIEJpbGxpbmdNb2RlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0X3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiQmlsbGluZ01vZGUgaXMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KSBidXQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGlzIG1pc3Npbmc7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCAoUmVhZENhcGFjaXR5VW5pdHMgLyBXcml0ZUNhcGFjaXR5VW5pdHMpLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0bm90IF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXR0cmlidXRlRGVmaW5pdGlvbnMgbXVzdCBub3QgZGVmaW5lIHRoZSBzYW1lIGF0dHJpYnV0ZSB0d2ljZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2FuXSksXFxuXFx0XFxcIktlZXAgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgYXR0cmlidXRlIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0YW4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFuKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSA9PSBhblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2Vjb25kYXJ5IGluZGV4IG5hbWVzIG11c3QgYmUgdW5pcXVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJkaW5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgRHVwbGljYXRlcyB3aXRoaW4gdGhlIHNhbWUgaW5kZXggbGlzdCBvbmx5OyBhIEdTSS9MU0kgY3Jvc3MtbGlzdCBjbGFzaCB3YXNcXG4jIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkluZGV4TmFtZVxcXCIsIFtwcm9wLCBiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiSW5kZXggbmFtZSAnJXMnIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2U7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJEdXBsaWNhdGUgaW5kZXggbmFtZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgc2Vjb25kYXJ5IGluZGV4IGEgdW5pcXVlIEluZGV4TmFtZVxcXCIsXFxuXFx0X3BmX2RkYmRpbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5hbWUpXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbCkgPT0gaW5hbWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHbG9iYWxUYWJsZSBSZXBsaWNhcyBtdXN0IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gdGhlIGVuZm9yY2UgcGx1Z2luXFxuIyBrbm93cyB0aGUgYXBwJ3MgY29uY3JldGUgcmVnaW9uIChzZWUgc3JjL3ByaXZhdGUvZW5mb3JjZS50cyk7IHdpdGhvdXQgaXQgdGhlXFxuIyByZWZlcmVuY2UgaXMgdW5kZWZpbmVkIGFuZCB0aGlzIHJ1bGUgc2tpcHMuIFJlcGxpY2FzIHdpdGggdW5yZXNvbHZhYmxlXFxuIyBSZWdpb24gdmFsdWVzIGFsc28gbWFrZSB0aGUgcnVsZSBza2lwIOKAlCBhYnNlbmNlIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBSZXBsaWNhcyBsaXN0ICV2IGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uICclcyc7IENyZWF0ZUdsb2JhbFRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgUmVwbGljYXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZSBjdXJyZW50IHJlZ2lvblxcXFxcXFwiXFxcIiwgW3JlcGxpY2FzLCByZWdpb25dKSxcXG5cXHRcXFwiQWRkIGEgcmVwbGljYSBlbnRyeSBmb3IgdGhlIHJlZ2lvbiB0aGUgc3RhY2sgZGVwbG95cyB0byAoQ0RLIFRhYmxlVjIgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHkpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItZ2xvYmFsdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGl0IGluIGl0ZW1zIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpKVxcblxcdH1cXG5cXHRyZXBsaWNhcyA6PSBbciB8IHNvbWUgaXQgaW4gaXRlbXM7IHIgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpXVxcblxcdG5vdCByZWdpb24gaW4gcmVwbGljYXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR1NJIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB0YWJsZSBCaWxsaW5nTW9kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ2J0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbiMgR1NJLWxldmVsIGNvdW50ZXJwYXJ0IG9mIHBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dCAod2hpY2ggY292ZXJzIHRoZVxcbiMgdGFibGUtbGV2ZWwgcGFpciBvbmx5KS4gU2FtZSB0b2tlbiBzYWZldHk6IGxpdGVyYWwgQmlsbGluZ01vZGUgb3IgYWJzZW50XFxuIyAoZGVmYXVsdCBQUk9WSVNJT05FRCk7IHRva2VuIHZhbHVlcyBuZXZlciBqdWRnZWQuXFxuX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBzcGVjaWZpZXMgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGJ1dCBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2FuJ3QgYmUgdXNlZCB3aXRoIFBBWV9QRVJfUkVRVUVTVCBCaWxsaW5nTW9kZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgR1NJJ3MgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggdGhlIHRhYmxlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGlzIG1pc3NpbmcgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHdoaWxlIHRoZSB0YWJsZSBiaWxscyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgdG8gdGhlIEdTSSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRub3QgaXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbktleUF0dHJpYnV0ZXMgZ29lcyB3aXRoIElOQ0xVREUsIGFuZCBvbmx5IHdpdGggSU5DTFVERVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ3BuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1wcm9qZWN0aW9uLmh0bWxcXFwiXFxuXFxuIyBHU0kgcHJvamVjdGlvbnMgb25seTogdGhlIExTSSBzaGFwZSBhbmQgdGhlIEtFWVNfT05MWStOb25LZXlBdHRyaWJ1dGVzIGNvbWJvXFxuIyB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHVzZXMgUHJvamVjdGlvblR5cGUgSU5DTFVERSB3aXRob3V0IE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBJTkNMVURFLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBub3Qgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiTGlzdCB0aGUgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaW4gTm9uS2V5QXR0cmlidXRlcywgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIEFMTCAvIEtFWVNfT05MWVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSU5DTFVERVxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA9PSAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgY29tYmluZXMgUHJvamVjdGlvblR5cGUgQUxMIHdpdGggTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIEFMTCwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiRHJvcCBOb25LZXlBdHRyaWJ1dGVzIChBTEwgYWxyZWFkeSBwcm9qZWN0cyBldmVyeXRoaW5nKSwgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIElOQ0xVREVcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkFMTFxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA+IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2V5U2NoZW1hIG11c3QgYmUgW0hBU0hdIG9yIFtIQVNILCBSQU5HRV1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmtzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBUYWJsZS1sZXZlbCBrZXkgc2NoZW1hIG9ubHk6IGluZGV4IGtleSBzY2hlbWFzIHByb2R1Y2UgZGlmZmVyZW50IHNlcnZpY2VcXG4jIGVycm9ycyBhbmQgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxuX3BmX2RkYmtzaF90eXBlKG5hbWUsIGkpIDo9IGt0IGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGl0LmluZGV4ID09IGlcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjAuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGZpcnN0IEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgSEFTSCwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIGZpcnN0IEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgSEFTSCBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlB1dCB0aGUgcGFydGl0aW9uIGtleSAoS2V5VHlwZSBIQVNIKSBmaXJzdCBhbmQgdGhlIG9wdGlvbmFsIHNvcnQga2V5IChSQU5HRSkgc2Vjb25kXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAwKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiSEFTSFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMS5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgc2Vjb25kIEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgUkFOR0UsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBzZWNvbmQgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBSQU5HRSBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlVzZSBleGFjdGx5IG9uZSBIQVNIIGVsZW1lbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgb25lIFJBTkdFIGVsZW1lbnRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDEpXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJSQU5HRVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiLFxcblxcdHNwcmludGYoXFxcIktleVNjaGVtYSBjYW4gaG9sZCBhdCBtb3N0IDIgZWxlbWVudHMgKEhBU0ggKyBvcHRpb25hbCBSQU5HRSksIGdvdCAlZFxcXCIsIFtuXSksXFxuXFx0XFxcIk1vZGVsIGV4dHJhIGFjY2VzcyBwYXR0ZXJucyBhcyBnbG9iYWwgb3IgbG9jYWwgc2Vjb25kYXJ5IGluZGV4ZXMgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRuIDo9IGNvdW50KFsxIHwgc29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKV0pXFxuXFx0biA+IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG11c3QgYmUgaW4gdGhlIHRhYmxlJ3MgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBLaW5lc2lzIERhdGEgU3RyZWFtcyBkZXN0aW5hdGlvbiBtdXN0IGxpdmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZVxcbiMgdGFibGUuIFRoZSBkZXBsb3ktdGltZSBmYWlsdXJlIG1vZGUgaXMgdWdseTogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIHRoZVxcbiMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMsIGFuZCBDbG91ZEZvcm1hdGlvbiByb2xscyBiYWNrIG9uXFxuIyBOb3RTdGFiaWxpemVkIG1pbnV0ZXMgbGF0ZXIg4oCUIG5vdGhpbmcgbmFtZXMgdGhlIHJlZ2lvbiBtaXNtYXRjaC5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSBpbiBlbmZvcmNlIG1vZGUgd2l0aCBhXFxuIyBjb25jcmV0ZSByZWdpb247IG90aGVyd2lzZSB0aGlzIHJ1bGUgc2tpcHMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIEtpbmVzaXMgc3RyZWFtIGxpdmVzIGluICclcycgYnV0IHRoZSB0YWJsZSBkZXBsb3lzIHRvICclcyc7IHRoZSBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcyBhbmQgdGhlIHN0YWNrIHJvbGxzIGJhY2tcXFwiLCBbc3RyZWFtUmVnaW9uLCByZWdpb25dKSxcXG5cXHRcXFwiUG9pbnQgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuIGF0IGEgc3RyZWFtIGluIHRoZSB0YWJsZSdzIG93biByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2tkcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG5cXHRzdHJlYW1SZWdpb24gOj0gcGFydHNbM11cXG5cXHRzdHJlYW1SZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRzdHJlYW1SZWdpb24gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxTSSBrZXkgYXR0cmlidXRlcyBtdXN0IGJlIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMzkgY2hlY2tzIHRhYmxlIGFuZCBHU0kga2V5IHNjaGVtYXMgYWdhaW5zdFxcbiMgQXR0cmlidXRlRGVmaW5pdGlvbnMgYnV0IGlzIGJsaW5kIHRvIExvY2FsU2Vjb25kYXJ5SW5kZXhlcyAobWVhc3VyZWRcXG4jIDIwMjYtMDktMDIsIDEuNy4wLWJldGEpLiBUaGlzIHJ1bGUgY292ZXJzIGV4YWN0bHkgdGhhdCBnYXAuXFxuXFxuX3BmX2RkYmxhZF9kZWZzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG4jIElmIGFueSBkZWZpbml0aW9uJ3MgbmFtZSBpcyB1bnJlc29sdmFibGUgdGhlIHNldCBpcyBpbmNvbXBsZXRlIOKAlCBzdGF5IHNpbGVudC5cXG5fcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0ZXZlcnkgZCBpbiBbeCB8IHNvbWUgeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKV0ge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTFNJIGtleSBhdHRyaWJ1dGUgJyVzJyBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGluIGEgS2V5U2NoZW1hIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIkFkZCB0aGUgYXR0cmlidXRlIHRvIEF0dHJpYnV0ZURlZmluaXRpb25zIChhbmQgbm93aGVyZSBlbHNlOiBvbmx5IGtleSBhdHRyaWJ1dGVzIGJlbG9uZyB0aGVyZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRjb3VudChfcGZfZGRibGFkX2RlZnMobmFtZSkpID4gMFxcblxcdF9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJsYWRfZGVmcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIExTSSBuZWVkcyBhIFJBTkdFIGtleSBhbmQgdGhlIHRhYmxlJ3MgbGVhZGluZyBoYXNoIGtleVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRibHNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiXFxuXFxuX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykgOj0ge2t0IHxcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa3QpXFxufVxcblxcbiMgT25seSBqdWRnZSBhIGtleSBzY2hlbWEgd2hvc2UgS2V5VHlwZXMgYXJlIGFsbCBsaXRlcmFsIHN0cmluZ3MuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlKGtzKSBpZiBjb3VudChfcGZfZGRibHNoX2tleXR5cGVzKGtzKSkgPiAwXFxuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcykgaWYge1xcblxcdGV2ZXJ5IGsgaW4ga3Mge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyBoYXMgbm8gUkFOR0Uga2V5OyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgYSByYW5nZSBrZXkgZm9yIGluZGV4XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSB0aGUgTFNJIGEgc29ydCBrZXk6IFt0YWJsZSBIQVNIIGtleSwgaXRzIG93biBSQU5HRSBrZXldXFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRjb3VudChrcykgPiAwXFxuXFx0X3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcylcXG5cXHRub3QgXFxcIlJBTkdFXFxcIiBpbiBfcGZfZGRibHNoX2tleXR5cGVzKGtzKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyB1c2VzIGhhc2gga2V5ICclcycgYnV0IHRoZSB0YWJsZSdzIGhhc2gga2V5IGlzICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZWFkaW5nIGhhc2gga2V5IGFzIHRhYmxlIEtleVNjaGVtYVxcXFxcXFwiXFxcIiwgW2luYW1lLCBsc2lIYXNoLCB0YWJsZUhhc2hdKSxcXG5cXHRcXFwiQW4gTFNJIG11c3QgcmV1c2UgdGhlIHRhYmxlJ3MgcGFydGl0aW9uIGtleTsgdXNlIGEgZ2xvYmFsIHNlY29uZGFyeSBpbmRleCBmb3IgYSBkaWZmZXJlbnQgaGFzaCBrZXlcXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdHQuaW5kZXggPT0gMFxcblxcdHRhYmxlSGFzaCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFibGVIYXNoKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkhBU0hcXFwiXFxuXFx0bHNpSGFzaCA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobHNpSGFzaClcXG5cXHRsc2lIYXNoICE9IHRhYmxlSGFzaFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFibGUgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlLCBkb3QgYW5kIGh5cGhlbiAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCIsXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiLCBcXFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLi1dezEsMjU1fSRgLCBuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBEeW5hbW9EQiBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZG90IGFuZCBoeXBoZW4sIHVwIHRvIDI1NSBjaGFyYWN0ZXJzXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0YWJsZSB1c2luZyBbYS16QS1aMC05Xy4tXSB3aXRoaW4gMjU1IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBuXSBpbiBfcGZfZGRibmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWxlbmd0aFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhYmxlTmFtZSBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVyc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCAobWluaW11bSAzIGNoYXJhY3RlcnMpIGlzIGVuZm9yY2VkLiBUaGUgMjU1LWNoYXJcXG4jIG1heGltdW0gYW5kIHRoZSBjaGFyYWN0ZXIgcGF0dGVybiB3ZXJlIG5vdCBtZWFzdXJlZC4gTm90ZSByZXNvbHZlKCkgdHVybnMgYVxcbiMgUmVmLXRvLXJlc291cmNlIGludG8gdGhlIHRhcmdldCdzIGxvZ2ljYWwgSUQ7IGEgbG9naWNhbCBJRCBzaG9ydCBlbm91Z2ggdG9cXG4jIHRyaXAgdGhpcyBydWxlIHdoaWxlIGZlZWRpbmcgYSBUYWJsZU5hbWUgaXMgdHJlYXRlZCBhcyB0aGUgYnVnIGl0IGFsbW9zdFxcbiMgY2VydGFpbmx5IGlzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhYmxlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGFibGVOYW1lICclcycgaXMgc2hvcnRlciB0aGFuIDMgY2hhcmFjdGVyczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAzXFxcXFxcXCJcXFwiLCBbdG5dKSxcXG5cXHRcXFwiVXNlIGEgdGFibGUgbmFtZSBvZiBhdCBsZWFzdCAzIGNoYXJhY3RlcnMsIG9yIG9taXQgVGFibGVOYW1lIGFuZCBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0dG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh0bilcXG5cXHRjb3VudCh0bikgPCAzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkluc3RhbmNlIHR5cGUgYXJjaGl0ZWN0dXJlIG11c3QgbWF0Y2ggdGhlIFNTTSBwdWJsaWMtcGFyYW1ldGVyIEFNSSBhcmNoaXRlY3R1cmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJpYWFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2UtdHlwZXMuaHRtbFxcXCJcXG5cXG4jIEdyYXZpdG9uIG5hbWluZyBjb252ZW50aW9uOiBhIFxcXCJnXFxcIiBhbW9uZyB0aGUgbGV0dGVycyBhZnRlciB0aGVcXG4jIGdlbmVyYXRpb24gZGlnaXQgKHQ0ZywgYzdnbiwgaW00Z24sIGc1ZyksIHBsdXMgdGhlIHByZS1jb252ZW50aW9uIGExLlxcbiMgbWFjKiBmYW1pbGllcyBhcmUgZXhjbHVkZWQgZnJvbSBqdWRnbWVudCBlbnRpcmVseS5cXG5fcGZfZWMyaWFhX2FybV9mYW0oZmFtKSBpZiByZWdleC5tYXRjaChgXlthLXpdK1swLTldK1thLXowLTldKmdbYS16MC05XSokYCwgZmFtKVxcblxcbl9wZl9lYzJpYWFfYXJtX2ZhbShmYW0pIGlmIGZhbSA9PSBcXFwiYTFcXFwiXFxuXFxuX3BmX2VjMmlhYV9mYW0obmFtZSkgOj0gZmFtIGlmIHtcXG5cXHRpdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGl0KVxcblxcdGZhbSA6PSBzcGxpdChpdCwgXFxcIi5cXFwiKVswXVxcblxcdG5vdCBzdGFydHN3aXRoKGZhbSwgXFxcIm1hY1xcXCIpXFxufVxcblxcbiMge3tyZXNvbHZlOnNzbTouLi59fSBzdHJpbmdzIHN1cmZhY2UgYXMge1xcXCJfX2R5bmFtaWNcXFwiOiBcXFwiZHluYW1pY1xcbiMgcmVmZXJlbmNlOiB7e3Jlc29sdmU6c3NtOjxwYXRoPn19XFxcIn0gbWFya2VyIG9iamVjdHMgKG1lYXN1cmVkXFxuIyAyMDI2LTA5LTAzKTsgdGhlIHJlZmVyZW5jZSB0ZXh0IGlzIHJlYWQgZnJvbSB0aGUgbWFya2VyLlxcbl9wZl9lYzJpYWFfaW1nKG5hbWUpIDo9IGQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiSW1hZ2VJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJhdylcXG5cXHRkIDo9IG9iamVjdC5nZXQocmF3LCBcXFwiX19keW5hbWljXFxcIiwgXFxcIlxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0Y29udGFpbnMoZCwgXFxcInt7cmVzb2x2ZTpzc206XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItaW5zdGFuY2UtYW1pLWFyY2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkltYWdlSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkluc3RhbmNlIHR5cGUgJyVzJyBpcyB4ODZfNjQgYnV0IHRoZSBBTUkgcGFyYW1ldGVyIHBhdGggbmFtZXMgYXJtNjQ7IHRoZSBsYXVuY2ggZmFpbHMgd2l0aCBhbiBhcmNoaXRlY3R1cmUgbWlzbWF0Y2hcXFwiLCBbcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKV0pLFxcblxcdFxcXCJVc2UgYW4gYXJtNjQgKEdyYXZpdG9uKSBpbnN0YW5jZSB0eXBlIG9yIHRoZSB4ODZfNjQgQU1JIHBhdGhcXFwiLFxcblxcdF9wZl9lYzJpYWFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiKVxcblxcdGZhbSA6PSBfcGZfZWMyaWFhX2ZhbShuYW1lKVxcblxcdG5vdCBfcGZfZWMyaWFhX2FybV9mYW0oZmFtKVxcblxcdGltZyA6PSBfcGZfZWMyaWFhX2ltZyhuYW1lKVxcblxcdGNvbnRhaW5zKGltZywgXFxcImFybTY0XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItaW5zdGFuY2UtYW1pLWFyY2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkltYWdlSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkluc3RhbmNlIHR5cGUgJyVzJyBpcyBhcm02NCAoR3Jhdml0b24pIGJ1dCB0aGUgQU1JIHBhcmFtZXRlciBwYXRoIG5hbWVzIHg4Nl82NDsgdGhlIGxhdW5jaCBmYWlscyB3aXRoIGFuIGFyY2hpdGVjdHVyZSBtaXNtYXRjaFxcXCIsIFtyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIpXSksXFxuXFx0XFxcIlVzZSBhbiB4ODZfNjQgaW5zdGFuY2UgdHlwZSBvciB0aGUgYXJtNjQgQU1JIHBhdGhcXFwiLFxcblxcdF9wZl9lYzJpYWFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiKVxcblxcdGZhbSA6PSBfcGZfZWMyaWFhX2ZhbShuYW1lKVxcblxcdF9wZl9lYzJpYWFfYXJtX2ZhbShmYW0pXFxuXFx0aW1nIDo9IF9wZl9lYzJpYWFfaW1nKG5hbWUpXFxuXFx0Y29udGFpbnMoaW1nLCBcXFwieDg2XzY0XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItbGF1bmNoLXRlbXBsYXRlLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGF1bmNoIHRlbXBsYXRlIG5hbWVzIGFyZSAzLTEyOCBjaGFycyBvZiBsZXR0ZXJzLCBudW1iZXJzIGFuZCAtKCkuL19cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWxhdW5jaC10ZW1wbGF0ZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5MYXVuY2hUZW1wbGF0ZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkxhdW5jaFRlbXBsYXRlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBFQzIgcmVxdWlyZXMgMy0xMjggY2hhcmFjdGVycyBvZiBsZXR0ZXJzLCBudW1iZXJzIGFuZCAtICggKSAuIC8gX1xcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgbGF1bmNoIHRlbXBsYXRlIHVzaW5nIG9ubHkgbGV0dGVycywgbnVtYmVycyBhbmQgLSAoICkgLiAvIF8gKDMtMTI4IGNoYXJhY3RlcnMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMYXVuY2hUZW1wbGF0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05KCkuL18tXXszLDEyOH0kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOQVQgZ2F0ZXdheSBBbGxvY2F0aW9uSWQgaXMgcmVxdWlyZWQgZm9yIHB1YmxpYyBjb25uZWN0aXZpdHkgYW5kIGZvcmJpZGRlbiBmb3IgcHJpdmF0ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMybmdhX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbFxcXCJcXG5cXG5fcGZfZWMybmdhX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuIyBDb25uZWN0aXZpdHlUeXBlIGRlZmF1bHRzIHRvIHB1YmxpYzsgYW4gdW5yZXNvbHZhYmxlIHZhbHVlIHNraXBzIGJvdGggZGlyZWN0aW9ucy5cXG5fcGZfZWMybmdhX3B1YmxpYyhuYW1lKSBpZiBfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQ29ubmVjdGl2aXR5VHlwZVxcXCIpXFxuXFxuX3BmX2VjMm5nYV9wdWJsaWMobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db25uZWN0aXZpdHlUeXBlXFxcIikgPT0gXFxcInB1YmxpY1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1uYXRndy1hbGxvY2F0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvY2F0aW9uSWRcXFwiLFxcblxcdFxcXCJBIHByaXZhdGUgTkFUIGdhdGV3YXkgY2Fubm90IHRha2UgQWxsb2NhdGlvbklkIChcXFxcXFxcIkFsbG9jYXRpb25JZCBjYW5ub3QgYmUgc3BlY2lmaWVkIGZvciBhIE5BVCBHYXRld2F5IHdpdGggQ29ubmVjdGl2aXR5IFR5cGUgcHJpdmF0ZS5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJSZW1vdmUgQWxsb2NhdGlvbklkLCBvciBzd2l0Y2ggQ29ubmVjdGl2aXR5VHlwZSB0byBwdWJsaWNcXFwiLFxcblxcdF9wZl9lYzJuZ2FfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db25uZWN0aXZpdHlUeXBlXFxcIikgPT0gXFxcInByaXZhdGVcXFwiXFxuXFx0bm90IF9wZl9lYzJuZ2FfYWJzZW50KG5hbWUsIFxcXCJBbGxvY2F0aW9uSWRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1uYXRndy1hbGxvY2F0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvY2F0aW9uSWRcXFwiLFxcblxcdFxcXCJBIHB1YmxpYyBOQVQgZ2F0ZXdheSByZXF1aXJlcyBBbGxvY2F0aW9uSWQgKFxcXFxcXFwiVGhlIHJlcXVlc3QgbXVzdCBpbmNsdWRlIHRoZSBBbGxvY2F0aW9uSWQgcGFyYW1ldGVyLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkFsbG9jYXRlIGFuIEVJUCBhbmQgcGFzcyBpdHMgQWxsb2NhdGlvbklkLCBvciBzZXQgQ29ubmVjdGl2aXR5VHlwZTogcHJpdmF0ZVxcXCIsXFxuXFx0X3BmX2VjMm5nYV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpOYXRHYXRld2F5XFxcIilcXG5cXHRfcGZfZWMybmdhX3B1YmxpYyhuYW1lKVxcblxcdF9wZl9lYzJuZ2FfYWJzZW50KG5hbWUsIFxcXCJBbGxvY2F0aW9uSWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1wZy1jbHVzdGVyLWJ1cnN0YWJsZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCdXJzdGFibGUgaW5zdGFuY2UgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gY2x1c3RlciBwbGFjZW1lbnQgZ3JvdXBzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlBsYWNlbWVudEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDcm9zcy1yZXNvdXJjZTogb25seSBmaXJlcyB3aGVuIHRoZSByZWZlcmVuY2VkIHBsYWNlbWVudCBncm91cCBpcyBpblxcbiMgdGhlIHRlbXBsYXRlIHdpdGggU3RyYXRlZ3kgY2x1c3Rlci4gQSBsaXRlcmFsIChwcmUtZXhpc3RpbmcpIGdyb3VwXFxuIyBuYW1lIGNhcnJpZXMgbm8gc3RyYXRlZ3kgaW5mb3JtYXRpb24gYW5kIHN0YXlzIHNpbGVudC5cXG5fcGZfZWMycGdiX2J1cnN0YWJsZShmYW0pIGlmIGZhbSBpbiB7XFxcInQyXFxcIiwgXFxcInQzXFxcIiwgXFxcInQzYVxcXCIsIFxcXCJ0NGdcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXBnLWNsdXN0ZXItYnVyc3RhYmxlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNsdXN0ZXIgcGxhY2VtZW50IGdyb3VwcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgJyVzJyBpbnN0YW5jZSB0eXBlOyB0aGUgbGF1bmNoIGZhaWxzIGF0IGRlcGxveVxcXCIsIFtpdF0pLFxcblxcdFxcXCJVc2UgYSBub24tYnVyc3RhYmxlIHR5cGUsIG9yIGEgc3ByZWFkL3BhcnRpdGlvbiBwbGFjZW1lbnQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvcGxhY2VtZW50LWdyb3Vwcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRpdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGl0KVxcblxcdF9wZl9lYzJwZ2JfYnVyc3RhYmxlKHNwbGl0KGl0LCBcXFwiLlxcXCIpWzBdKVxcblxcdHBnIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhY2VtZW50R3JvdXBOYW1lXFxcIilcXG5cXHRwZyBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlBsYWNlbWVudEdyb3VwXFxcIilcXG5cXHRyZXNvbHZlKHBnLCBcXFwiUHJvcGVydGllcy5TdHJhdGVneVxcXCIpID09IFxcXCJjbHVzdGVyXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1yb3V0ZS10YXJnZXQtZXhhY3RseS1vbmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByb3V0ZSBtdXN0IG5hbWUgZXhhY3RseSBvbmUgdGFyZ2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Um91dGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSAxMSB0YXJnZXQgcHJvcGVydGllcywgc3RyYWlnaHQgZnJvbSB0aGUgRUMyIGVycm9yIG1lc3NhZ2UuXFxuX3BmX2VjMnJ0ZV90YXJnZXRzIDo9IFtcXFwiR2F0ZXdheUlkXFxcIiwgXFxcIkxvY2FsR2F0ZXdheUlkXFxcIiwgXFxcIkNhcnJpZXJHYXRld2F5SWRcXFwiLCBcXFwiTmF0R2F0ZXdheUlkXFxcIiwgXFxcIk5ldHdvcmtJbnRlcmZhY2VJZFxcXCIsIFxcXCJWcGNQZWVyaW5nQ29ubmVjdGlvbklkXFxcIiwgXFxcIkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlJZFxcXCIsIFxcXCJUcmFuc2l0R2F0ZXdheUlkXFxcIiwgXFxcIlZwY0VuZHBvaW50SWRcXFwiLCBcXFwiQ29yZU5ldHdvcmtBcm5cXFwiLCBcXFwiSW5zdGFuY2VJZFxcXCJdXFxuXFxuX3BmX2VjMnJ0ZV9jb3VudChuYW1lKSA6PSBuIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRuIDo9IGNvdW50KFtrIHwgc29tZSBrIGluIF9wZl9lYzJydGVfdGFyZ2V0czsgb2JqZWN0LmdldChwcm9wcywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXJvdXRlLXRhcmdldC1leGFjdGx5LW9uZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSByb3V0ZSBuYW1lcyAldiB0YXJnZXRzOyBFQzIgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2YgR2F0ZXdheUlkLCBMb2NhbEdhdGV3YXlJZCwgQ2FycmllckdhdGV3YXlJZCwgTmF0R2F0ZXdheUlkLCBOZXR3b3JrSW50ZXJmYWNlSWQsIFZwY1BlZXJpbmdDb25uZWN0aW9uSWQsIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlJZCwgVHJhbnNpdEdhdGV3YXlJZCwgVnBjRW5kcG9pbnRJZCwgQ29yZU5ldHdvcmtBcm4gb3IgSW5zdGFuY2VJZFxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBleGFjdGx5IG9uZSB0YXJnZXQgcHJvcGVydHkgb24gdGhlIHJvdXRlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLXJvdXRlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Um91dGVcXFwiKVxcblxcdG4gOj0gX3BmX2VjMnJ0ZV9jb3VudChuYW1lKVxcblxcdG4gIT0gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1jaWRyLXZhbGlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgQ2lkcklwIG11c3QgYmUgYSB3ZWxsLWZvcm1lZCBJUHY0IENJRFJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJzY3ZfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0F1dGhvcml6ZVNlY3VyaXR5R3JvdXBJbmdyZXNzLmh0bWxcXFwiXFxuXFxuX3BmX2VjMnNjdl9tYWxmb3JtZWQoYykgaWYge1xcblxcdHJlZ2V4Lm1hdGNoKGBeWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rL1swLTldKyRgLCBjKVxcblxcdHRvX251bWJlcihzcGxpdChjLCBcXFwiL1xcXCIpWzFdKSA+IDMyXFxufVxcblxcbl9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpIGlmIHtcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHRzb21lIG8gaW4gc3BsaXQoc3BsaXQoYywgXFxcIi9cXFwiKVswXSwgXFxcIi5cXFwiKVxcblxcdHRvX251bWJlcihvKSA+IDI1NVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1jaWRyLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkNpZHJJcFxcXCIsIFtkaXIsIGl0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDaWRySXAgJyVzJyBpcyBtYWxmb3JtZWQgKG9jdGV0cyBtdXN0IGJlIDAtMjU1LCBwcmVmaXggMC0zMik7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJDSURSIGJsb2NrICVzIGlzIG1hbGZvcm1lZFxcXFxcXFwiXFxcIiwgW2MsIGNdKSxcXG5cXHRcXFwiRml4IHRoZSBDSURSIG5vdGF0aW9uXFxcIixcXG5cXHRfcGZfZWMyc2N2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiQ2lkcklwXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRfcGZfZWMyc2N2X21hbGZvcm1lZChjKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1jaWRyLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DaWRySXBcXFwiLFxcblxcdHNwcmludGYoXFxcIkNpZHJJcCAnJXMnIGlzIG1hbGZvcm1lZCAob2N0ZXRzIG11c3QgYmUgMC0yNTUsIHByZWZpeCAwLTMyKTsgRUMyIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkNJRFIgYmxvY2sgJXMgaXMgbWFsZm9ybWVkXFxcXFxcXCJcXFwiLCBbYywgY10pLFxcblxcdFxcXCJGaXggdGhlIENJRFIgbm90YXRpb25cXFwiLFxcblxcdF9wZl9lYzJzY3ZfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DaWRySXBcXFwiKVxcblxcdGlzX3N0cmluZyhjKVxcblxcdF9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXNnLWdyb3VwLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VjdXJpdHkgZ3JvdXAgbmFtZXMgbWF5IG5vdCBzdGFydCB3aXRoIHNnLVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1ncm91cC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Hcm91cE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkdyb3VwTmFtZSAnJXMnIHN0YXJ0cyB3aXRoIHRoZSByZXNlcnZlZCBwcmVmaXg7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJHcm91cCBuYW1lcyBtYXkgbm90IGJlIGluIHRoZSBmb3JtYXQgc2ctKlxcXFxcXFwiXFxcIiwgW2duXSksXFxuXFx0XFxcIlBpY2sgYSBuYW1lIHRoYXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBzZy1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlY3VyaXR5R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRnbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdyb3VwTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGduKVxcblxcdHN0YXJ0c3dpdGgoZ24sIFxcXCJzZy1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIFRDUC9VRFAgcG9ydHMgbXVzdCBiZSB3aXRoaW4gMC02NTUzNSBhbmQgRnJvbVBvcnQgPD0gVG9Qb3J0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2dfZml4IDo9IFxcXCJVc2UgYSBwb3J0IGJldHdlZW4gMCBhbmQgNjU1MzUgd2l0aCBGcm9tUG9ydCA8PSBUb1BvcnRcXFwiXFxuXFxuX3BmX3NnX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9wb3J0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9wb3J0X291dChuKSBpZiBuID4gNjU1MzVcXG5cXG5fcGZfdGNwX3VkcChwKSBpZiBwIGluIHtcXFwidGNwXFxcIiwgXFxcInVkcFxcXCIsIFxcXCI2XFxcIiwgXFxcIjE3XFxcIiwgNiwgMTd9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC4lc1xcXCIsIFtkaXIsIGl0ZW0uaW5kZXgsIHBuYW1lXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgb3V0c2lkZSB0aGUgdmFsaWQgVENQL1VEUCBwb3J0IHJhbmdlIDAtNjU1MzVcXFwiLCBbcG5hbWUsIG5dKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRfcGZfdGNwX3VkcChvYmplY3QuZ2V0KGVudHJ5LCBcXFwiSXBQcm90b2NvbFxcXCIsIG51bGwpKVxcblxcdHNvbWUgcG5hbWUgaW4ge1xcXCJGcm9tUG9ydFxcXCIsIFxcXCJUb1BvcnRcXFwifVxcblxcdG4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIHBuYW1lLCBudWxsKSlcXG5cXHRfcGZfcG9ydF9vdXQobilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5Gcm9tUG9ydFxcXCIsIFtkaXIsIGl0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJGcm9tUG9ydCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFRvUG9ydCAoJXYpXFxcIiwgW2YsIHRdKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRfcGZfdGNwX3VkcChvYmplY3QuZ2V0KGVudHJ5LCBcXFwiSXBQcm90b2NvbFxcXCIsIG51bGwpKVxcblxcdGYgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIFxcXCJGcm9tUG9ydFxcXCIsIG51bGwpKVxcblxcdHQgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIFxcXCJUb1BvcnRcXFwiLCBudWxsKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGcm9tUG9ydCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFRvUG9ydCAoJXYpXFxcIiwgW2YsIHRdKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdF9wZl90Y3BfdWRwKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSXBQcm90b2NvbFxcXCIpKVxcblxcdGYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRnJvbVBvcnRcXFwiKSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvUG9ydFxcXCIpKVxcblxcdGYgPj0gMFxcblxcdHQgPD0gNjU1MzVcXG5cXHRmID4gdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1ydWxlLWRlc2NyaXB0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgZGVzY3JpcHRpb25zIGFyZSBsaW1pdGVkIHRvIDI1NSBjaGFycyBvZiBhIHJlc3RyaWN0ZWQgQVNDSUkgc2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2dkZXNjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9zZ2Rlc2NfcGF0IDo9IGBeW2EtekEtWjAtOS5fIDovKCkjLEBcXFxcW1xcXFxdKz0mO3t9ISQqLV17MCwyNTV9JGBcXG5cXG4jIGlubGluZSBydWxlIGxpc3RzIG9uIGEgc2VjdXJpdHkgZ3JvdXBcXG5fcGZfc2dkZXNjX2JhZCBjb250YWlucyBbbmFtZSwgcGF0aCwgZGVzY10gaWYge1xcblxcdHNvbWUgbiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUga2V5IGluIFtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJdXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2tleV0pKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdGRlc2MgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRGVzY3JpcHRpb25cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhkZXNjKVxcblxcdG5vdCByZWdleC5tYXRjaChfcGZfc2dkZXNjX3BhdCwgZGVzYylcXG5cXHRuYW1lIDo9IG5cXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRGVzY3JpcHRpb25cXFwiLCBba2V5LCByLmluZGV4XSlcXG59XFxuXFxuIyBzdGFuZGFsb25lIHJ1bGUgcmVzb3VyY2VzXFxuX3BmX3NnZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIGRlc2NdIGlmIHtcXG5cXHRzb21lIHQgaW4gW1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiXVxcblxcdHNvbWUgbiBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdGRlc2MgOj0gcmVzb2x2ZShuLCBcXFwiUHJvcGVydGllcy5EZXNjcmlwdGlvblxcXCIpXFxuXFx0aXNfc3RyaW5nKGRlc2MpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9zZ2Rlc2NfcGF0LCBkZXNjKVxcblxcdG5hbWUgOj0gblxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXJ1bGUtZGVzY3JpcHRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiU2VjdXJpdHkgZ3JvdXAgcnVsZSBkZXNjcmlwdGlvbiAnJXMnIGlzIHJlamVjdGVkOiBFQzIgYWxsb3dzIGZld2VyIHRoYW4gMjU2IGNoYXJhY3RlcnMgZnJvbSB0aGUgc2V0IGEtekEtWjAtOS4gXy06LygpIyxAW10rPSY7e30hJCogKG5vbi1BU0NJSSB0ZXh0IHN1Y2ggYXMgSmFwYW5lc2UgaXMgcmVqZWN0ZWQpXFxcIiwgW2Rlc2NdKSxcXG5cXHRcXFwiV3JpdGUgdGhlIHJ1bGUgZGVzY3JpcHRpb24gaW4gdGhlIGFsbG93ZWQgQVNDSUkgc2V0IGFuZCBrZWVwIGl0IHVuZGVyIDI1NiBjaGFyYWN0ZXJzXFxcIixcXG5cXHRfcGZfc2dkZXNjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRlc2NdIGluIF9wZl9zZ2Rlc2NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBzZWN1cml0eSBncm91cCBydWxlIHRha2VzIGV4YWN0bHkgb25lIHNvdXJjZS9kZXN0aW5hdGlvbiBmaWVsZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnNzZV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG4jIFRoZSBtZW1iZXIgc2V0cyBjb21lIHZlcmJhdGltIGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlcy5cXG5fcGZfZWMyc3NlX3NldHMgOj0ge1xcXCJpblxcXCI6IFtcXFwiQ2lkcklwXFxcIiwgXFxcIkNpZHJJcHY2XFxcIiwgXFxcIlNvdXJjZVNlY3VyaXR5R3JvdXBJZFxcXCIsIFxcXCJTb3VyY2VQcmVmaXhMaXN0SWRcXFwiXSwgXFxcIm91dFxcXCI6IFtcXFwiQ2lkcklwXFxcIiwgXFxcIkNpZHJJcHY2XFxcIiwgXFxcIkRlc3RpbmF0aW9uUHJlZml4TGlzdElkXFxcIiwgXFxcIkRlc3RpbmF0aW9uU2VjdXJpdHlHcm91cElkXFxcIl19XFxuXFxuX3BmX2VjMnNzZV9kaXJrZXkgOj0ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCI6IFxcXCJpblxcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIjogXFxcIm91dFxcXCJ9XFxuXFxuX3BmX2VjMnNzZV9ya2V5IDo9IHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIjogXFxcImluXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIjogXFxcIm91dFxcXCJ9XFxuXFxuX3BmX2VjMnNzZV9jb3VudChlbnRyeSwgc2V0a2V5KSA6PSBuIGlmIHtcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMyc3NlX3NldHNbc2V0a2V5XTsgb2JqZWN0LmdldChlbnRyeSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxufVxcblxcbiMgRW1iZWRkZWQgcnVsZXM6IHR3byBvciBtb3JlIG1lbWJlcnMgaXMgYW4gZXJyb3I7IHplcm8gaXMgdG9sZXJhdGVkXFxuIyAoYSBzb3VyY2UtbGVzcyBlbWJlZGRlZCBpbmdyZXNzIGRlcGxveWVkIGNsZWFuIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJ1bGUgc2V0cyAldiBvZiAldjsgRUMyIGFsbG93cyBvbmx5IG9uZSAoXFxcXFxcXCJPbmx5IG9uZSBvZiAlcyBjYW4gYmUgc3BlY2lmaWVkXFxcXFxcXCIpXFxcIiwgW24sIF9wZl9lYzJzc2Vfc2V0c1trXSwgY29uY2F0KFxcXCIsIFxcXCIsIF9wZl9lYzJzc2Vfc2V0c1trXSldKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGQgb24gdGhlIHJ1bGVcXFwiLFxcblxcdF9wZl9lYzJzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ayA6PSBfcGZfZWMyc3NlX2RpcmtleVtkaXJdXFxuXFx0biA6PSBfcGZfZWMyc3NlX2NvdW50KGl0ZW0udmFsdWUsIGspXFxuXFx0biA+PSAyXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcnVsZSBzZXRzICV2IG9mICV2OyBFQzIgcmVxdWlyZXMgZXhhY3RseSBvbmUgKFxcXFxcXFwiRXhhY3RseSBvbmUgb2YgJXMgbXVzdCBiZSBzcGVjaWZpZWQgYW5kIG5vdCBlbXB0eVxcXFxcXFwiKVxcXCIsIFtuLCBfcGZfZWMyc3NlX3NldHNba10sIGNvbmNhdChcXFwiLCBcXFwiLCBfcGZfZWMyc3NlX3NldHNba10pXSksXFxuXFx0XFxcIlNldCBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGQgb24gdGhlIHJ1bGUgcmVzb3VyY2VcXFwiLFxcblxcdF9wZl9lYzJzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGsgOj0gX3BmX2VjMnNzZV9ya2V5W3J0eXBlXVxcblxcdG4gOj0gX3BmX2VjMnNzZV9jb3VudChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgaylcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc3VibmV0LWNpZHItc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJuZXQgSVB2NCBDSURSIG5ldG1hc2sgbXVzdCBiZSBiZXR3ZWVuIC8xNiBhbmQgLzI4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3N1Ym5ldGNpZHJfbGVuKGMpIDo9IHRvX251bWJlcihwYXJ0c1sxXSkgaWYge1xcblxcdHBhcnRzIDo9IHNwbGl0KGMsIFxcXCIvXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gMlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zdWJuZXQtY2lkci1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DaWRyQmxvY2tcXFwiLFxcblxcdHNwcmludGYoXFxcIlN1Ym5ldCBDSURSICclcycgaGFzIGEgLyVkIG5ldG1hc2s7IEVDMiBhY2NlcHRzIC8xNiB0aHJvdWdoIC8yOCBhbmQgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGwgb3RoZXJ3aXNlXFxcIiwgW2MsIG5dKSxcXG5cXHRcXFwiUmVzaXplIHRoZSBzdWJuZXQgQ0lEUiB0byBhIG5ldG1hc2sgYmV0d2VlbiAvMTYgYW5kIC8yOFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS9zdWJuZXQtc2l6aW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U3VibmV0XFxcIilcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRuIDo9IF9wZl9zdWJuZXRjaWRyX2xlbihjKVxcblxcdF9wZl9zdWJuZXRjaWRyX291dChuKVxcbn1cXG5cXG5fcGZfc3VibmV0Y2lkcl9vdXQobikgaWYgbiA8IDE2XFxuXFxuX3BmX3N1Ym5ldGNpZHJfb3V0KG4pIGlmIG4gPiAyOFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXVzZXJkYXRhLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUMyIHVzZXIgZGF0YSBpcyBsaW1pdGVkIHRvIDE2Mzg0IGJ5dGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Vkc3pfZml4IDo9IFxcXCJLZWVwIHVzZXIgZGF0YSB1bmRlciAxNjM4NCBieXRlczsgbW92ZSBsYXJnZSBwYXlsb2FkcyB0byBTMyBhbmQgZmV0Y2ggdGhlbSBmcm9tIGEgc21hbGwgYm9vdHN0cmFwIHNjcmlwdFxcXCJcXG5cXG5fcGZfdWRzel91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pbnN0YW5jZWRhdGEtYWRkLXVzZXItZGF0YS5odG1sXFxcIlxcblxcbl9wZl91ZHN6X2xpbWl0IDo9IDE2Mzg0XFxuXFxuIyBiYXNlNjQg5paH5a2X5YiX44Gu44OH44Kz44O844OJ5b6M44OQ44Kk44OI5pWw77yI44OR44OH44Kj44Oz44Kw6ICD5oWu77yJXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDIgaWYgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG5cXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9ICgoY291bnQocykgKiAzKSAvIDQpIC0gMSBpZiB7XFxuXFx0ZW5kc3dpdGgocywgXFxcIj1cXFwiKVxcblxcdG5vdCBlbmRzd2l0aChzLCBcXFwiPT1cXFwiKVxcbn1cXG5cXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9IChjb3VudChzKSAqIDMpIC8gNCBpZiBub3QgZW5kc3dpdGgocywgXFxcIj1cXFwiKVxcblxcbl9wZl91ZHN6X3BhdGhzIDo9IHtcXG5cXHRcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIjogXFxcIlByb3BlcnRpZXMuVXNlckRhdGFcXFwiLFxcblxcdFxcXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcXFwiOiBcXFwiUHJvcGVydGllcy5MYXVuY2hUZW1wbGF0ZURhdGEuVXNlckRhdGFcXFwiLFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjOODquODhuODqeODqyBiYXNlNjQg5paH5a2X5YiX44Gu44Kx44O844K5XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgZGVjb2RlcyB0byBhYm91dCAldiBieXRlcywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbc2l6ZSwgX3BmX3Vkc3pfbGltaXRdKSxcXG5cXHRfcGZfdWRzel9maXgsIF9wZl91ZHN6X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUsIHAgaW4gX3BmX3Vkc3pfcGF0aHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0dWQgOj0gcmVzb2x2ZShuYW1lLCBwKVxcblxcdGlzX3N0cmluZyh1ZClcXG5cXHRzaXplIDo9IF9wZl91ZHN6X2RlY29kZWQodWQpXFxuXFx0c2l6ZSA+IF9wZl91ZHN6X2xpbWl0XFxufVxcblxcbiMgVXNlckRhdGEg44GMIHtcXFwiRm46OkJhc2U2NFxcXCI6IFxcXCI8bGl0ZXJhbD5cXFwifSDjga7jgrHjg7zjgrnvvIjjgqjjg7PjgrPjg7zjg4nliY3jga7nlJ/jg5DjgqTjg4jmlbDjgafliKTlrprvvIlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi11c2VyZGF0YS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgcCxcXG5cXHRzcHJpbnRmKFxcXCJVc2VyRGF0YSBpcyAlZCBieXRlcyBiZWZvcmUgYmFzZTY0IGVuY29kaW5nLCBidXQgRUMyIGxpbWl0cyB1c2VyIGRhdGEgdG8gJWQgYnl0ZXM7IFJ1bkluc3RhbmNlcyBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtjb3VudChpbm5lciksIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19vYmplY3QodWQpXFxuXFx0aW5uZXIgOj0gb2JqZWN0LmdldCh1ZCwgXFxcIkZuOjpCYXNlNjRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhpbm5lcilcXG5cXHRjb3VudChpbm5lcikgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUtaW9wc1wiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQlMgSW9wcy9UaHJvdWdocHV0IG11c3QgbWF0Y2ggdGhlIHZvbHVtZSB0eXBlJ3Mgc3VwcG9ydGVkIHJhbmdlcyBhbmQgcmF0aW9zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3ZvbGlvcHNfZml4IDo9IFxcXCJNYXRjaCBJb3BzL1Rocm91Z2hwdXQgdG8gdGhlIHZvbHVtZSB0eXBlOiBncDMgMzAwMC04MDAwMCBJT1BTIChtYXggNTAwL0dpQiwgdGhyb3VnaHB1dCAxMjUtMjAwMCBNaUIvcyBhbmQgYXQgbW9zdCBJT1BTLzQpLCBpbzEgMTAwLTY0MDAwIChtYXggNTAvR2lCKSwgaW8yIDEwMC0yNTYwMDAgKG1heCAxMDAwL0dpQik7IGdwMi9zdDEvc2MxL3N0YW5kYXJkIGFjY2VwdCBuZWl0aGVyIHByb3BlcnR5XFxcIlxcblxcbl9wZl92b2xpb3BzX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbFxcXCJcXG5cXG5fcGZfdm9saW9wc19yYW5nZSA6PSB7XFxcImdwM1xcXCI6IFszMDAwLCA4MDAwMF0sIFxcXCJpbzFcXFwiOiBbMTAwLCA2NDAwMF0sIFxcXCJpbzJcXFwiOiBbMTAwLCAyNTYwMDBdfVxcblxcbl9wZl92b2xpb3BzX3Blcl9naWIgOj0ge1xcXCJncDNcXFwiOiA1MDAsIFxcXCJpbzFcXFwiOiA1MCwgXFxcImlvMlxcXCI6IDEwMDB9XFxuXFxuX3BmX3ZvbGlvcHNfb3V0KG4sIGxvLCBoaSkgaWYgbiA8IGxvXFxuXFxuX3BmX3ZvbGlvcHNfb3V0KG4sIGxvLCBoaSkgaWYgbiA+IGhpXFxuXFxuX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG5cXG4jIElPUFMg44GM5Z6L44GU44Go44Gu57W25a++44Os44Oz44K45aSWXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAlZC0lZCBmb3IgJXMgdm9sdW1lc1xcXCIsIFtuLCByWzBdLCByWzFdLCB2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHIgOj0gX3BmX3ZvbGlvcHNfcmFuZ2VbdnRdXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0X3BmX3ZvbGlvcHNfb3V0KG4sIHJbMF0sIHJbMV0pXFxufVxcblxcbiMgSU9QUyA6IOOCteOCpOOCuuavlOOBrui2hemBjlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBleGNlZWRzIHRoZSBtYXhpbXVtIHJhdGlvIG9mICVkIElPUFMgcGVyIEdpQiBmb3IgJXMgKFNpemUgJXYgR2lCIGFsbG93cyBhdCBtb3N0ICV2KVxcXCIsIFtuLCByYXRpbywgdnQsIHMsIHMgKiByYXRpb10pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHJhdGlvIDo9IF9wZl92b2xpb3BzX3Blcl9naWJbdnRdXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaXplXFxcIikpXFxuXFx0biA+IHMgKiByYXRpb1xcbn1cXG5cXG4jIElvcHMg44KS5Y+X44GR5LuY44GR44Gq44GE5Z6L44GrIElvcHMg44KS5oyH5a6aXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMywgaW8xLCBpbzIpOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGxcXFwiLCBbdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHR2dCBpbiB7XFxcImdwMlxcXCIsIFxcXCJzdDFcXFwiLCBcXFwic2MxXFxcIiwgXFxcInN0YW5kYXJkXFxcIn1cXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKVxcbn1cXG5cXG4jIFRocm91Z2hwdXQg44GvIGdwMyDlsILnlKhcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMgdm9sdW1lcyAodmFsaWQgb25seSBmb3IgZ3AzKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHZ0KVxcblxcdHZ0ICE9IFxcXCJncDNcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIilcXG59XFxuXFxuIyBncDMgVGhyb3VnaHB1dCDjga7ntbblr77jg6zjg7PjgrhcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgaXMgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlIDEyNS0yMDAwIGZvciBncDMgdm9sdW1lc1xcXCIsIFt0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0X3BmX3ZvbGlvcHNfb3V0KHQsIDEyNSwgMjAwMClcXG59XFxuXFxuIyBncDMgVGhyb3VnaHB1dCA6IElPUFMg5q+U77yI5pyA5aSnIDAuMjUgTWlCL3MgcGVyIElPUFPvvIlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAwLjI1IE1pQi9zIHBlciBwcm92aXNpb25lZCBJT1BTICgldiBJT1BTIGFsbG93cyBhdCBtb3N0ICV2KVxcXCIsIFt0LCBuLCBuIC8gNF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHQgKiA0ID4gblxcbn1cXG5cXG4jIGdwMyDjgacgSW9wcyDmnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggMzAwMO+8ieOBruOBqOOBjeOBriBUaHJvdWdocHV0IOavlFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBleGNlZWRzIDc1MCwgdGhlIG1heGltdW0gZm9yIHRoZSBkZWZhdWx0IDMwMDAgSU9QUyAoMC4yNSBNaUIvcyBwZXIgSU9QUyk7IHByb3Zpc2lvbiBJb3BzIGV4cGxpY2l0bHkgb3IgbG93ZXIgdGhlIHRocm91Z2hwdXRcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdG5vdCBfcGZfdm9saW9wc19oYXNfaW9wcyhuYW1lKVxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdHQgPiA3NTBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiaW8xIGFuZCBpbzIgdm9sdW1lcyByZXF1aXJlIHRoZSBJb3BzIHByb3BlcnR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBwZi1lYzItdm9sdW1lLWlvcHMgdmFsaWRhdGVzIElvcHMgdmFsdWVzOyB0aGlzIHJ1bGUgY292ZXJzIHRoZVxcbiMgY29uZGl0aW9uYWwgcmVxdWlyZW1lbnQgKGFic2VuY2UpIHRoYXQgdGhlIHNjaGVtYSBjYW5ub3QgZXhwcmVzcy5cXG5fcGZfZWMydmlyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVzIHZvbHVtZXMgcmVxdWlyZSBJb3BzOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGwgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXIgaW9wcyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgJXMgdm9sdW1lcy5cXFxcXFxcIlxcXCIsIFt2dCwgdnRdKSxcXG5cXHRcXFwiU2V0IElvcHMgKGlvMTogMTAwLTY0MDAwLCBpbzI6IDEwMC0yNTYwMDApXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJpbzFcXFwiLCBcXFwiaW8yXFxcIn1cXG5cXHRfcGZfZWMydmlyX2Fic2VudChuYW1lLCBcXFwiSW9wc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1rbXMtZW5jcnlwdGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkttc0tleUlkIG9uIGEgdm9sdW1lIHJlcXVpcmVzIEVuY3J5cHRlZCB0byBiZSB0cnVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZrZV9iYWQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJFbmNyeXB0ZWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9lYzJ2a2VfYmFkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5jcnlwdGVkXFxcIikgPT0gZmFsc2VcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUta21zLWVuY3J5cHRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS21zS2V5SWRcXFwiLFxcblxcdFxcXCJLbXNLZXlJZCBpcyBzZXQgYnV0IEVuY3J5cHRlZCBpcyBub3QgdHJ1ZTsgRUMyIHJlamVjdHMgdGhlIHZvbHVtZSB3aXRoIFxcXFxcXFwiVGhlIHBhcmFtZXRlciBbS21zS2V5SWRdIHJlcXVpcmVzIHRoZSBwYXJhbWV0ZXIgRW5jcnlwdGVkIHRvIGJlIHNldC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBFbmNyeXB0ZWQ6IHRydWUgYWxvbmdzaWRlIEttc0tleUlkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJLbXNLZXlJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRfcGZfZWMydmtlX2JhZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUtc2l6ZS1taW5pbXVtXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVCUyB2b2x1bWUgc2l6ZSBtdXN0IG1lZXQgdGhlIHZvbHVtZSB0eXBlIG1pbmltdW0gKGlvMS9pbzIgNCBHaUIsIHN0MS9zYzEgMTI1IEdpQilcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgbWluaW11bXM6IHRoZSBoaXN0b3JpY2FsIDE2Mzg0IEdpQiBtYXhpbXVtIG5vIGxvbmdlciBob2xkc1xcbiMgKGEgMTcwMDAgR2lCIGdwMyBkZXBsb3llZCBjbGVhbiBvbiAyMDI2LTA5LTAzKS5cXG5fcGZfZWMydnNtX21pbiA6PSB7XFxcImlvMVxcXCI6IDQsIFxcXCJpbzJcXFwiOiA0LCBcXFwic3QxXFxcIjogMTI1LCBcXFwic2MxXFxcIjogMTI1fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1zaXplLW1pbmltdW1cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiLFxcblxcdHNwcmludGYoXFxcIlNpemUgJXYgR2lCIGlzIGJlbG93IHRoZSAldiBHaUIgbWluaW11bSBmb3IgJXMgdm9sdW1lcyAoXFxcXFxcXCIlcyB2b2x1bWVzIG11c3QgYmUgYXQgbGVhc3QgJXYgR2lCIGluIHNpemUuXFxcXFxcXCIpXFxcIiwgW3MsIG1uLCB2dCwgdnQsIG1uXSksXFxuXFx0XFxcIlJhaXNlIFNpemUgdG8gdGhlIHZvbHVtZSB0eXBlIG1pbmltdW1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRtbiA6PSBfcGZfZWMydnNtX21pblt2dF1cXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiKSlcXG5cXHRzIDwgbW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdnBjLWNpZHItYmxvY2stc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJWUEMgSVB2NCBDSURSIGJsb2NrIG5ldG1hc2sgbXVzdCBiZSBiZXR3ZWVuIC8xNiBhbmQgLzI4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lIHZhbGlkYXRlcyBzdWJuZXQgY29udGFpbm1lbnQgKEUzMDU5KSBhbmQgb3ZlcmxhcCAoRTMwNjApXFxuIyBidXQgYWNjZXB0cyBhbnkgVlBDIG5ldG1hc2s7IEVDMiByZWplY3RzIGFueXRoaW5nIG91dHNpZGUgLzE2Li4vMjguXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjLWNpZHItYmxvY2stc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJWUEMgQ0lEUiBibG9jayAnJXMnIGhhcyBuZXRtYXNrIC8ldjsgRUMyIG9ubHkgYWNjZXB0cyAvMTYgdGhyb3VnaCAvMjggKFxcXFxcXFwiVGhlIENJRFIgJyVzJyBpcyBpbnZhbGlkLlxcXFxcXFwiKVxcXCIsIFtjLCBwLCBjXSksXFxuXFx0XFxcIlVzZSBhIG5ldG1hc2sgYmV0d2VlbiAvMTYgYW5kIC8yOFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENcXFwiKVxcblxcdGMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DaWRyQmxvY2tcXFwiKVxcblxcdGlzX3N0cmluZyhjKVxcblxcdHJlZ2V4Lm1hdGNoKGBeWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rL1swLTldKyRgLCBjKVxcblxcdHAgOj0gdG9fbnVtYmVyKHNwbGl0KGMsIFxcXCIvXFxcIilbMV0pXFxuXFx0X3BmX2VjMnZjc19vdXQocClcXG59XFxuXFxuX3BmX2VjMnZjc19vdXQocCkgaWYgcCA8IDE2XFxuXFxuX3BmX2VjMnZjc19vdXQocCkgaWYgcCA+IDI4XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdnBjZS1nYXRld2F5LXNlcnZpY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2F0ZXdheSBWUEMgZW5kcG9pbnRzIG9ubHkgZXhpc3QgZm9yIFMzIGFuZCBEeW5hbW9EQlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBWcGNFbmRwb2ludFR5cGUgZGVmYXVsdHMgdG8gR2F0ZXdheSAobWVhc3VyZWQ6IGEgdHlwZS1sZXNzIGVuZHBvaW50XFxuIyBmYWlscyB3aXRoIFxcXCJFbmRwb2ludCB0eXBlIChHYXRld2F5KSAuLi5cXFwiIG1lc3NhZ2VzKS5cXG5fcGZfZWMydmdzX2dhdGV3YXkobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWcGNFbmRwb2ludFR5cGVcXFwiLCBcXFwiR2F0ZXdheVxcXCIpID09IFxcXCJHYXRld2F5XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12cGNlLWdhdGV3YXktc2VydmljZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIk9ubHkgUzMgYW5kIER5bmFtb0RCIG9mZmVyIEdhdGV3YXkgZW5kcG9pbnRzOyBcXFxcXFxcIiVzXFxcXFxcXCIgZmFpbHMgd2l0aCBcXFxcXFxcIkVuZHBvaW50IHR5cGUgKEdhdGV3YXkpIGRvZXMgbm90IG1hdGNoIGF2YWlsYWJsZSBzZXJ2aWNlIHR5cGVzXFxcXFxcXCJcXFwiLCBbY29uY2F0KFxcXCIuXFxcIiwgcGFydHMpXSksXFxuXFx0XFxcIlVzZSBjb20uYW1hem9uYXdzLjxyZWdpb24+LnMzIG9yIC5keW5hbW9kYiwgb3Igc3dpdGNoIFZwY0VuZHBvaW50VHlwZSB0byBJbnRlcmZhY2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC9wcml2YXRlbGluay9nYXRld2F5LWVuZHBvaW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRfcGZfZWMydmdzX2dhdGV3YXkobmFtZSlcXG5cXHRzbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoc24pXFxuXFx0cGFydHMgOj0gc3BsaXQoc24sIFxcXCIuXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gNFxcblxcdHBhcnRzWzBdID09IFxcXCJjb21cXFwiXFxuXFx0cGFydHNbMV0gPT0gXFxcImFtYXpvbmF3c1xcXCJcXG5cXHRub3QgcGFydHNbM10gaW4ge1xcXCJzM1xcXCIsIFxcXCJkeW5hbW9kYlxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2Utc2VydmljZS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVlBDIGVuZHBvaW50IHNlcnZpY2UgbmFtZXMgbXVzdCB1c2UgdGhlIGRlcGxveSByZWdpb24gdW5sZXNzIFNlcnZpY2VSZWdpb24gaXMgc2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydnNyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcHJpdmF0ZWxpbmsvcHJpdmF0ZWxpbmstYWNjZXNzLWF3cy1zZXJ2aWNlcy5odG1sXFxcIlxcblxcbiMgT25seSBjb20uYW1hem9uYXdzLjxyZWdpb24+LjxzZXJ2aWNlPiBuYW1lcyB3aGVyZSB0aGUgdGhpcmQgc2VnbWVudCBpc1xcbiMgcmVnaW9uLXNoYXBlZDsgbmFtZXMgbGlrZSBjb20uYW1hem9uYXdzLnMzLWdsb2JhbC5hY2Nlc3Nwb2ludCBzdGF5IG91dC5cXG5fcGZfZWMydnNyX3BhcnRzKG5hbWUpIDo9IHBhcnRzIGlmIHtcXG5cXHRzbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoc24pXFxuXFx0cGFydHMgOj0gc3BsaXQoc24sIFxcXCIuXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gNFxcblxcdHBhcnRzWzBdID09IFxcXCJjb21cXFwiXFxuXFx0cGFydHNbMV0gPT0gXFxcImFtYXpvbmF3c1xcXCJcXG5cXHRyZWdleC5tYXRjaChgXlthLXpdezJ9KC1bYS16XSspKy1bMC05XSskYCwgcGFydHNbMl0pXFxufVxcblxcbl9wZl9lYzJ2c3JfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12cGNlLXNlcnZpY2UtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRW5kcG9pbnQgc2VydmljZSAnJXMnIG5hbWVzIHJlZ2lvbiAlcyBidXQgdGhpcyBzdGFjayBkZXBsb3lzIHRvICVzOyB3aXRob3V0IFNlcnZpY2VSZWdpb24gdGhlIGxvb2t1cCBpcyByZWdpb25hbCBhbmQgdGhlIGNyZWF0ZSBmYWlsc1xcXCIsIFtjb25jYXQoXFxcIi5cXFwiLCBwYXJ0cyksIHBhcnRzWzJdLCByZWdpb25dKSxcXG5cXHRcXFwiVXNlIGNvbS5hbWF6b25hd3MuPGRlcGxveS1yZWdpb24+LjxzZXJ2aWNlPiwgb3Igc2V0IFNlcnZpY2VSZWdpb24gZm9yIGNyb3NzLXJlZ2lvbiBQcml2YXRlTGlua1xcXCIsXFxuXFx0X3BmX2VjMnZzcl91cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0cGFydHMgOj0gX3BmX2VjMnZzcl9wYXJ0cyhuYW1lKVxcblxcdHBhcnRzWzJdICE9IHJlZ2lvblxcblxcdF9wZl9lYzJ2c3JfYWJzZW50KG5hbWUsIFxcXCJTZXJ2aWNlUmVnaW9uXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdnBjZS10eXBlLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJuZXRJZHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gR2F0ZXdheSBlbmRwb2ludHMgKGFuZCBSb3V0ZVRhYmxlSWRzIG9ubHkgb24gR2F0ZXdheSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2dGNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lYzItdnBjZW5kcG9pbnQuaHRtbFxcXCJcXG5cXG5fcGZfZWMydnRjX3R5cGUobmFtZSkgOj0gdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjRW5kcG9pbnRUeXBlXFxcIiwgXFxcIkdhdGV3YXlcXFwiKVxcbn1cXG5cXG5fcGZfZWMydnRjX2hhcyhuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS10eXBlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3VibmV0SWRzXFxcIixcXG5cXHRcXFwiQSBHYXRld2F5IGVuZHBvaW50IGNhbm5vdCB0YWtlIFN1Ym5ldElkcyAoXFxcXFxcXCJTdWJuZXQgSURzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgSW50ZXJmYWNlIGFuZCBHYXRld2F5TG9hZEJhbGFuY2VyIHR5cGUgVlBDIEVuZHBvaW50cy5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJSZW1vdmUgU3VibmV0SWRzLCBvciBzZXQgVnBjRW5kcG9pbnRUeXBlOiBJbnRlcmZhY2VcXFwiLFxcblxcdF9wZl9lYzJ2dGNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdF9wZl9lYzJ2dGNfdHlwZShuYW1lKSA9PSBcXFwiR2F0ZXdheVxcXCJcXG5cXHRfcGZfZWMydnRjX2hhcyhuYW1lLCBcXFwiU3VibmV0SWRzXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS10eXBlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm91dGVUYWJsZUlkc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSAlcyBlbmRwb2ludCBjYW5ub3QgdGFrZSBSb3V0ZVRhYmxlSWRzOyBvbmx5IEdhdGV3YXkgZW5kcG9pbnRzIGF0dGFjaCB0byByb3V0ZSB0YWJsZXNcXFwiLCBbdF0pLFxcblxcdFxcXCJSZW1vdmUgUm91dGVUYWJsZUlkcywgb3Igc2V0IFZwY0VuZHBvaW50VHlwZTogR2F0ZXdheVxcXCIsXFxuXFx0X3BmX2VjMnZ0Y191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0dCA6PSBfcGZfZWMydnRjX3R5cGUobmFtZSlcXG5cXHR0ICE9IFxcXCJHYXRld2F5XFxcIlxcblxcdGlzX3N0cmluZyh0KVxcblxcdF9wZl9lYzJ2dGNfaGFzKG5hbWUsIFxcXCJSb3V0ZVRhYmxlSWRzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY2x1c3Rlci1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDUyBjbHVzdGVyIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChtYXggMjU1KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jbHVzdGVyLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNsdXN0ZXJOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbHVzdGVyTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNsdXN0ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpDbHVzdGVyXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2x1c3Rlck5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTV9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250YWluZXJEZWZpbml0aW9ucyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNvbnRhaW5lclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NjZGVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfZWNzY2RlX21zZyA6PSBcXFwiUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBuZWVkcyBhdCBsZWFzdCBvbmUgY29udGFpbmVyOyB0aGUgc2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIGxpc3QgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiXFxuXFxuX3BmX2Vjc2NkZV9maXggOj0gXFxcIkFkZCBhdCBsZWFzdCBvbmUgZW50cnkgdG8gQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIG1hcmtzIG5vIFRhc2tEZWZpbml0aW9uIHByb3BlcnR5IGFzIHJlcXVpcmVkLCBzbyBhblxcbiMgYWJzZW50IG9yIGVtcHR5IENvbnRhaW5lckRlZmluaXRpb25zIHNhaWxzIHRocm91Z2ggc2NoZW1hIHZhbGlkYXRpb24gYW5kXFxuIyBkaWVzIGF0IHJlZ2lzdHJhdGlvbi4gZmxhdHRlbl9saXN0IHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgYWJzZW50IGFuZFxcbiMgZW1wdHkgYWxpa2UsIHNvIGJvdGggYmxvY2tzIHJlYWQgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoaW5wdXQucmVzb3VyY2VzKVxcbiMgdG8gdGVsbCBhIGxpdGVyYWwgZW1wdHkgbGlzdCBmcm9tIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBzdWNoIGFzIEZuOjpJZi5cXG5fcGZfZWNzY2RlX3Byb3BzKG5hbWUpIDo9IHByb3BzIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb250YWluZXJEZWZpbml0aW9uc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHJhdylcXG5cXHRjb3VudChyYXcpID09IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1vdmVyLXRhc2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgTWVtb3J5IG11c3Qgbm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzaW5nbGUgY29udGFpbmVyJ3MgaGFyZCBNZW1vcnkgbGltaXQgY2Fubm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnkuXFxuIyBUYXNrIE1lbW9yeSBhcnJpdmVzIGFzIGEgc3RyaW5nIChcXFwiNTEyXFxcIik7IHRvX251bWJlciBjb3ZlcnMgYm90aCBzcGVsbGluZ3MgYW5kXFxuIyBtYWtlcyB0aGUgcnVsZSBza2lwIHdoZW4gZWl0aGVyIHNpZGUgaXMgdW5yZXNvbHZhYmxlIG9yIEdCLXN1ZmZpeGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnkgJXYgYWJvdmUgdGhlIHRhc2stbGV2ZWwgTWVtb3J5ICV2OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgJ21lbW9yeScgc2V0dGluZyBmb3IgY29udGFpbmVyICclcycgaXMgZ3JlYXRlciB0aGFuIGZvciB0aGUgdGFza1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBjbSwgdG0sIGNuYW1lXSksXFxuXFx0XFxcIkxvd2VyIHRoZSBjb250YWluZXIgTWVtb3J5IHRvIGF0IG1vc3QgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LCBvciByYWlzZSB0aGUgdGFzay1sZXZlbCBNZW1vcnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dG0gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIikpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0Y20gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVxcXCIsIG51bGwpKVxcblxcdGNtID4gdG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgbmVlZHMgTWVtb3J5IG9yIE1lbW9yeVJlc2VydmF0aW9uIHdoZW4gdGhlIHRhc2sgc2V0cyBubyBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NtZW1yZXFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBXaGVuIHRoZSB0YXNrIGRlZmluaXRpb24gaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5LCBldmVyeSBjb250YWluZXIgbXVzdCBzZXRcXG4jIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbi4gUHJvdmluZyB0cnVlIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZFxcbiMgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcyk6IHJlc29sdmUoKSBpcyB1bmRlZmluZWQgZm9yIGEgbWlzc2luZyBrZXkgYW5kIGZvclxcbiMgYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGFsaWtlLCBzbyBpdCBjYW5ub3QgdGVsbCBcXFwiYWJzZW50XFxcIiBmcm9tIFxcXCJSZWYgdG8gYVxcbiMgcGFyYW1ldGVyXFxcIi4gVGhlIGlzX29iamVjdCBndWFyZCBmYWlscyBjbG9zZWQgaWYgdGhhdCBpbnRlcm5hbCBzaGFwZSBjaGFuZ2VzLlxcbl9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTWVtb3J5XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIG5laXRoZXIgTWVtb3J5IG5vciBNZW1vcnlSZXNlcnZhdGlvbiBhbmQgdGhlIHRhc2sgaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJBdCBsZWFzdCBvbmUgb2YgJ21lbW9yeScgb3IgJ21lbW9yeVJlc2VydmF0aW9uJyBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2NuYW1lXSksXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSwgb3IgZ2l2ZSB0aGUgY29udGFpbmVyIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvblxcXCIsXFxuXFx0X3BmX2Vjc21lbXJlcV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc21lbXJlcV90YXNrX21lbW9yeV9hYnNlbnQobmFtZSlcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1lbW9yeVJlc2VydmF0aW9uIG11c3Qgbm90IGV4Y2VlZCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWVtb3J5UmVzZXJ2YXRpb24gaXMgYSBzb2Z0IGZsb29yIGFuZCBNZW1vcnkgYSBoYXJkIGNlaWxpbmc7IHRoZSBzZXJ2aWNlXFxuIyByZWplY3RzIGEgZmxvb3IgYWJvdmUgdGhlIGNlaWxpbmcuIHRvX251bWJlciBmYWlscyAoYW5kIHRoZSBydWxlIHNraXBzKSB3aGVuXFxuIyBlaXRoZXIgdmFsdWUgaXMgYWJzZW50IG9yIHVucmVzb2x2YWJsZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIE1lbW9yeVJlc2VydmF0aW9uICV2IGFib3ZlIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiJ21lbW9yeScgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJ21lbW9yeVJlc2VydmF0aW9uJ1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBtciwgbV0pLFxcblxcdFxcXCJMb3dlciBNZW1vcnlSZXNlcnZhdGlvbiB0byBhdCBtb3N0IE1lbW9yeSwgb3IgcmFpc2UgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRtciA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSlcXG5cXHRtciA+IG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWR1cGxpY2F0ZS1jb250YWluZXItbmFtZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmUgZGlhZ25vc3RpYyBwZXIgZHVwbGljYXRlZCBsYXRlciBvY2N1cnJlbmNlOyBvbmx5IGxpdGVyYWwgc3RyaW5nIG5hbWVzXFxuIyBjYW4gYmUgY29tcGFyZWQsIHNvIGEgUmVmLXZhbHVlZCBOYW1lIHNraXBzIGl0cyBwYWlycy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk5hbWVcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciBuYW1lICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblxcXFxcXFwiXFxcIiwgW25hXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgY29udGFpbmVyIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYSBkaXN0aW5jdCBOYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdG5hIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIk5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhuYSlcXG5cXHRuYSA9PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgbXVzdCBiZSAyMS0yMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZXBoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tZXBoZW1lcmFsc3RvcmFnZS5odG1sXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBjYXJyaWVzIG5vIG1pbmltdW0vbWF4aW11bSBmb3IgU2l6ZUluR2lCLCBzbyAyMS0yMDAgaXNcXG4jIGVuZm9yY2VkIG9ubHkgYXQgcmVnaXN0cmF0aW9uIHRpbWUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBiZWxvdyAyMTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRXBoZW1lcmFsU3RvcmFnZSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAyMVxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiVXNlIGEgc2l6ZSBiZXR3ZWVuIDIxIGFuZCAyMDAgR2lCLCBvciBkcm9wIEVwaGVtZXJhbFN0b3JhZ2UgdG8ga2VlcCB0aGUgZGVmYXVsdCAyMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzIDwgMjFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBhYm92ZSAyMDA7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbW9zdCAyMDBcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQlxcXCIsXFxuXFx0X3BmX2Vjc2VwaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIpKVxcblxcdHMgPiAyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdCBsZWFzdCBvbmUgY29udGFpbmVyIG11c3QgYmUgZXNzZW50aWFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVzc2VudGlhbCBkZWZhdWx0cyB0byB0cnVlLCBzbyB0aGUgcnVsZSBmaXJlcyBvbmx5IHdoZW4gZXZlcnkgY29udGFpbmVyIHNheXNcXG4jIEVzc2VudGlhbDogZmFsc2UgZXhwbGljaXRseS4gQSBjb250YWluZXIgd2hvc2UgRXNzZW50aWFsIGlzIHVucmVzb2x2YWJsZSAob3JcXG4jIGEgbm9uLWJvb2xlYW4pIGJyZWFrcyB0aGUgYGV2ZXJ5YCwgYW5kIHRoZSBydWxlIHNraXBzIOKAlCBhYnNlbmNlIG9mIGFuXFxuIyBlc3NlbnRpYWwgY29udGFpbmVyIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1lc3NlbnRpYWwtY29udGFpbmVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0XFxcIkV2ZXJ5IGNvbnRhaW5lciBzZXRzIEVzc2VudGlhbDogZmFsc2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIlRhc2sgZGVmaW5pdGlvbiBkb2Vzbid0IGhhdmUgYW55IGVzc2VudGlhbCBjb250YWluZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIk1hcmsgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciBFc3NlbnRpYWw6IHRydWUsIG9yIG9taXQgRXNzZW50aWFsIChpdCBkZWZhdWx0cyB0byB0cnVlKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0aXRlbXMgOj0gW2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGMgaW4gaXRlbXMge1xcblxcdFxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIkVzc2VudGlhbFxcXCIsIG51bGwpID09IGZhbHNlXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLW5ldHdvcmstbW9kZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGYXJnYXRlIHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyZSBOZXR3b3JrTW9kZSAnYXdzdnBjJ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc25tX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCNuZXR3b3JrX21vZGVcXFwiXFxuXFxuIyByZXNvbHZlKCkgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwidW5yZXNvbHZhYmxlXFxcIiAoYm90aCB1bmRlZmluZWQpLCBzbyB0cnVlXFxuIyBhYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQ7IGEgUmVmLXZhbHVlZCBOZXR3b3JrTW9kZVxcbiMgbm8gbG9uZ2VyIHRyaXBzIHRoZSBub3Qtc2V0IGJsb2NrLlxcbl9wZl9lY3NubV9hYnNlbnQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJOZXR3b3JrTW9kZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrTW9kZSBpcyAnJXMnIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCB1c2UgJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbm1dKSxcXG5cXHRcXFwiU2V0IE5ldHdvcmtNb2RlIHRvICdhd3N2cGMnXFxcIixcXG5cXHRfcGZfZWNzbm1fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHJjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdGlzX2FycmF5KHJjKVxcblxcdFxcXCJGQVJHQVRFXFxcIiBpbiByY1xcblxcdG5tIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cXG4jIE5ldHdvcmtNb2RlIOacquaMh+WumuOBp+OCgiBSZWdpc3RlclRhc2tEZWZpbml0aW9uIOOBr1xcbiMgXFxcIkZhcmdhdGUgb25seSBzdXBwb3J0cyBuZXR3b3JrIG1vZGUgJ2F3c3ZwYycuXFxcIiDjgaflpLHmlZfjgZnjgovvvIgyMDI2LTA5LTAxIOWunyBBUEkg56K66KqN77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRcXFwiTmV0d29ya01vZGUgaXMgbm90IHNldCwgYnV0IHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyaW5nIEZBUkdBVEUgY29tcGF0aWJpbGl0eSBtdXN0IHNldCBpdCB0byAnYXdzdnBjJzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRfcGZfZWNzbm1fYWJzZW50KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZBUkdBVEUgY29tcGF0aWJpbGl0eSByZXF1aXJlcyB0YXNrLWxldmVsIENwdSBhbmQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZmFyZ2NtX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwNDcgY2hlY2tzIHRoZSBDcHUvTWVtb3J5IHBhaXJpbmcgb25seSB3aGVuIGJvdGggYXJlIHByZXNlbnQ7XFxuIyBsZWF2aW5nIG9uZSBvdXQgZW50aXJlbHkgaXMgY2F1Z2h0IGJ5IG5vdGhpbmcgYmVmb3JlIHJlZ2lzdHJhdGlvbi4gVHJ1ZVxcbiMgYWJzZW5jZSBuZWVkcyB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgcGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcXG4jIGZvciB0aGUgaWRpb20pLlxcbl9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSByYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdHJjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS10YXNrLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNwdVxcXCIsXFxuXFx0XFxcIlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzIGluY2x1ZGVzIEZBUkdBVEUgYnV0IHRoZSB0YXNrLWxldmVsIENwdSBpcyBtaXNzaW5nOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlcXVpcmVzIHRoYXQgJ2NwdScgYmUgZGVmaW5lZCBhdCB0aGUgdGFzayBsZXZlbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IHRhc2stbGV2ZWwgQ3B1IChhbmQgTWVtb3J5KSB0byBvbmUgb2YgdGhlIHN1cHBvcnRlZCBGYXJnYXRlIGNvbWJpbmF0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2ZhcmdjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9mYXJnYXRlKG5hbWUpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwgXFxcIkNwdVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZW1vcnlcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBNZW1vcnkgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdtZW1vcnknIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSAoYW5kIENwdSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJNZW1vcnlcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWNvZGVkZXBsb3ktbGJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09ERV9ERVBMT1kgZGVwbG95bWVudCBjb250cm9sbGVyIHJlcXVpcmVzIGEgbG9hZCBiYWxhbmNlclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEZpcmVzIG9uIGEgbWlzc2luZyBrZXkgb3IgYSBwcmVzZW50LWJ1dC1lbXB0eSBsaXN0OyBhbiB1bnJlc29sdmFibGVcXG4jIExvYWRCYWxhbmNlcnMgdmFsdWUgc3RheXMgc2lsZW50IChtYXJrZXIgb2JqZWN0cyBhcmUgXFxcInByZXNlbnRcXFwiKS5cXG5fcGZfZWNzY2RsYl9ub25lKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTG9hZEJhbGFuY2Vyc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2Vjc2NkbGJfbm9uZShuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0bGJzIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJMb2FkQmFsYW5jZXJzXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShsYnMpXFxuXFx0Y291bnQobGJzKSA9PSAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtY29kZWRlcGxveS1sYlxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbnRyb2xsZXJcXFwiLFxcblxcdFxcXCJEZXBsb3ltZW50Q29udHJvbGxlciBpcyBDT0RFX0RFUExPWSBidXQgbm8gTG9hZEJhbGFuY2VycyBhcmUgY29uZmlndXJlZDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwidGhlIHNlcnZpY2UgcmVxdWlyZXMgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIExvYWRCYWxhbmNlcnMgZW50cnkgd2l0aCBhIHRhcmdldCBncm91cCwgb3IgdXNlIHRoZSBFQ1MgY29udHJvbGxlclxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbnRyb2xsZXIuVHlwZVxcXCIpID09IFxcXCJDT0RFX0RFUExPWVxcXCJcXG5cXHRfcGZfZWNzY2RsYl9ub25lKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtZGFlbW9uLWRlc2lyZWQtY291bnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiREFFTU9OIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZG9lcyBub3QgYWNjZXB0IERlc2lyZWRDb3VudFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIERlc2lyZWRDb3VudCAwIGZhaWxzIHRvbyAoc3YwM2IpIC0gYW55IHByZXNlbmNlIG9mIHRoZSBrZXkgaXMgdGhlIHZpb2xhdGlvbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWRhZW1vbi1kZXNpcmVkLWNvdW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXNpcmVkQ291bnRcXFwiLFxcblxcdFxcXCJTY2hlZHVsaW5nU3RyYXRlZ3kgaXMgREFFTU9OIGJ1dCBEZXNpcmVkQ291bnQgaXMgc2V0OyBDcmVhdGVTZXJ2aWNlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgZGFlbW9uIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZG9lcyBub3Qgc3VwcG9ydCBhIGRlc2lyZWQgY291bnQgZm9yIHNlcnZpY2VzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgRGVzaXJlZENvdW50IGZyb20gREFFTU9OIHNlcnZpY2VzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlZHVsaW5nU3RyYXRlZ3lcXFwiKSA9PSBcXFwiREFFTU9OXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiRGVzaXJlZENvdW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWRlcGxveW1lbnQtcGVyY2VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEZXBsb3ltZW50Q29uZmlndXJhdGlvbiBwZXJjZW50IGJvdW5kcyAobWluIDw9IDEwMCwgbWF4ID49IDEwMClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1kZXBsb3ltZW50LXBlcmNlbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb25maWd1cmF0aW9uLk1pbmltdW1IZWFsdGh5UGVyY2VudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUhlYWx0aHlQZXJjZW50ICV2IGV4Y2VlZHMgMTAwOyBDcmVhdGVTZXJ2aWNlIGZhaWxzIHdpdGggXFxcXFxcXCJtaW5pbXVtSGVhbHRoeVBlcmNlbnQgbXVzdCBiZSBhdCBtb3N0IDEwMFxcXFxcXFwiXFxcIiwgW21pbnBdKSxcXG5cXHRcXFwiS2VlcCBNaW5pbXVtSGVhbHRoeVBlcmNlbnQgYXQgMTAwIG9yIGJlbG93XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bWlucCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NaW5pbXVtSGVhbHRoeVBlcmNlbnRcXFwiKSlcXG5cXHRtaW5wID4gMTAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZGVwbG95bWVudC1wZXJjZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NYXhpbXVtUGVyY2VudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWF4aW11bVBlcmNlbnQgJXYgaXMgYmVsb3cgMTAwOyBDcmVhdGVTZXJ2aWNlIGZhaWxzIHdpdGggXFxcXFxcXCJtYXhpbXVtUGVyY2VudCBtdXN0IGJlIGF0IGxlYXN0IDEwMFxcXFxcXFwiXFxcIiwgW21heHBdKSxcXG5cXHRcXFwiS2VlcCBNYXhpbXVtUGVyY2VudCBhdCAxMDAgb3IgYWJvdmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRtYXhwIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb25maWd1cmF0aW9uLk1heGltdW1QZXJjZW50XFxcIikpXFxuXFx0bWF4cCA8IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWZhcmdhdGUtcGxhY2VtZW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBsYWNlbWVudCBjb25zdHJhaW50cyBhbmQgc3RyYXRlZ2llcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBGQVJHQVRFXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZmFyZ2F0ZS1wbGFjZW1lbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBba2V5XSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgc2V0IGJ1dCB0aGUgRkFSR0FURSBsYXVuY2ggdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHRhc2sgcGxhY2VtZW50OyBDcmVhdGVTZXJ2aWNlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW2tleV0pLFxcblxcdFxcXCJSZW1vdmUgcGxhY2VtZW50IGNvbnN0cmFpbnRzL3N0cmF0ZWdpZXMgZnJvbSBGYXJnYXRlIHNlcnZpY2VzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5MYXVuY2hUeXBlXFxcIikgPT0gXFxcIkZBUkdBVEVcXFwiXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJQbGFjZW1lbnRDb25zdHJhaW50c1xcXCIsIFxcXCJQbGFjZW1lbnRTdHJhdGVnaWVzXFxcIn1cXG5cXHRjb3VudChbcSB8IHNvbWUgcSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtrZXldKSldKSA+IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1sYXVuY2gtdHlwZS1jYXBhY2l0eS1wcm92aWRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYXVuY2hUeXBlIGFuZCBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3kgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWxhdW5jaC10eXBlLWNhcGFjaXR5LXByb3ZpZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lcXFwiLFxcblxcdHNwcmludGYoXFxcIkxhdW5jaFR5cGUgJyVzJyBhbmQgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5IGNhbm5vdCBib3RoIGJlIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiU3BlY2lmeWluZyBib3RoIGEgbGF1bmNoIHR5cGUgYW5kIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsIFtsdF0pLFxcblxcdFxcXCJSZW1vdmUgTGF1bmNoVHlwZSBvciB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3lcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRsdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhsdClcXG5cXHRjb3VudChbcSB8IHNvbWUgcSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5XFxcIildKSA+IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1sYi10YXJnZXQtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgbG9hZCBiYWxhbmNlciBlbnRyeSB0YWtlcyBlaXRoZXIgVGFyZ2V0R3JvdXBBcm4gb3IgTG9hZEJhbGFuY2VyTmFtZSwgbm90IGJvdGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1sYi10YXJnZXQtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJzXFxcIixcXG5cXHRcXFwiQSBMb2FkQmFsYW5jZXJzIGVudHJ5IHNldHMgYm90aCBUYXJnZXRHcm91cEFybiBhbmQgTG9hZEJhbGFuY2VyTmFtZTsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibG9hZEJhbGFuY2VyTmFtZSBhbmQgdGFyZ2V0R3JvdXBBcm4gY2Fubm90IGJvdGggYmUgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFRhcmdldEdyb3VwQXJuIChBTEIvTkxCKSBvciBMb2FkQmFsYW5jZXJOYW1lIChDTEIpIHBlciBlbnRyeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2Vyc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRub3Qgb2JqZWN0LmdldChlbnRyeSwgXFxcIlRhcmdldEdyb3VwQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG5vdCBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiTG9hZEJhbGFuY2VyTmFtZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDUyBzZXJ2aWNlIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChtYXggMjU1KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTZXJ2aWNlTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNsdXN0ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTV9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbmV0d29yay1jb25maWctbW9kZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOZXR3b3JrQ29uZmlndXJhdGlvbiByZXF1aXJlcyBhbiBhd3N2cGMgdGFzayBkZWZpbml0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiLFxuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUgc2hpcHMgRTMwNTIgZm9yIHRoZSBpbnZlcnNlIChhd3N2cGMgdGFzayBkZWZpbml0aW9uIHdpdGhvdXRcXG4jIE5ldHdvcmtDb25maWd1cmF0aW9uKTsgdGhpcyBkaXJlY3Rpb24gaXMgdW5ndWFyZGVkLiBPbmx5IGFuIGV4cGxpY2l0XFxuIyBub24tYXdzdnBjIE5ldHdvcmtNb2RlIGZpcmVzIC0gdGhlIGFic2VudC1tb2RlIGRlZmF1bHQgaXMgdW5iZW5jaGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtbmV0d29yay1jb25maWctbW9kZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTmV0d29ya0NvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIk5ldHdvcmtDb25maWd1cmF0aW9uIGlzIHNldCBidXQgdGhlIHJlZmVyZW5jZWQgdGFzayBkZWZpbml0aW9uIHVzZXMgTmV0d29ya01vZGUgJyVzJzsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiTmV0d29yayBDb25maWd1cmF0aW9uIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGdpdmVuIG5ldHdvcmtNb2RlIG9mIHRoaXMgdGFzayBkZWZpbml0aW9uLlxcXFxcXFwiXFxcIiwgW25tXSksXFxuXFx0XFxcIlVzZSBhbiBhd3N2cGMgdGFzayBkZWZpbml0aW9uLCBvciBkcm9wIE5ldHdvcmtDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0bm90IG9iamVjdC5nZXQocHJvcHMsIFxcXCJOZXR3b3JrQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHR0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHR0ZCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRubSA6PSByZXNvbHZlKHRkLCBcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG5tKVxcblxcdG5tICE9IFxcXCJhd3N2cGNcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtcGxhdGZvcm0tdmVyc2lvbi1lYzJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGxhdGZvcm1WZXJzaW9uIGlzIG5vdCBhbGxvd2VkIHdpdGggdGhlIEVDMiBsYXVuY2ggdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLXBsYXRmb3JtLXZlcnNpb24tZWMyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QbGF0Zm9ybVZlcnNpb25cXFwiLFxcblxcdFxcXCJMYXVuY2hUeXBlIGlzIEVDMiBidXQgUGxhdGZvcm1WZXJzaW9uIGlzIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIHBsYXRmb3JtIHZlcnNpb24gbXVzdCBiZSBudWxsIHdoZW4gc3BlY2lmeWluZyBhbiBFQzIgbGF1bmNoIHR5cGVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQbGF0Zm9ybVZlcnNpb24gKGl0IGFwcGxpZXMgdG8gRmFyZ2F0ZSBvbmx5KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVHlwZVxcXCIpID09IFxcXCJFQzJcXFwiXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0bm90IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQbGF0Zm9ybVZlcnNpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXRhc2tkZWYtZmFtaWx5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhc2sgZGVmaW5pdGlvbiBGYW1pbHkgYWxsb3dzIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy10YXNrZGVmLWZhbWlseVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmFtaWx5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGYW1pbHkgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlclRhc2tEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GYW1pbHlcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTV9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItYWxiLXN1Ym5ldC1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFwcGxpY2F0aW9uIGxvYWQgYmFsYW5jZXJzIG5lZWQgYXQgbGVhc3QgdHdvIHN1Ym5ldHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VsYnNjX2FsYihuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlR5cGVcXFwiLCBcXFwiYXBwbGljYXRpb25cXFwiKSA9PSBcXFwiYXBwbGljYXRpb25cXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItYWxiLXN1Ym5ldC1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3VibmV0c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGFwcGxpY2F0aW9uIGxvYWQgYmFsYW5jZXIgbGlzdHMgJXYgc3VibmV0KHMpOyBFTEIgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGluIGRpZmZlcmVudCBBWnMgKFxcXFxcXFwiQXQgbGVhc3QgdHdvIHN1Ym5ldHMgaW4gdHdvIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXMgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIilcXFwiLCBbY291bnQoc3VicyldKSxcXG5cXHRcXFwiTGlzdCB0d28gb3IgbW9yZSBzdWJuZXRzIGZyb20gZGlmZmVyZW50IEF2YWlsYWJpbGl0eSBab25lc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMb2FkQmFsYW5jZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRfcGZfZWxic2NfYWxiKG5hbWUpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0c3VicyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiU3VibmV0c1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoc3VicylcXG5cXHRjb3VudChzdWJzKSA8IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1hcHAtY29va2llLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJhcHBfY29va2llIHN0aWNraW5lc3MgcmVxdWlyZXMgYSBjb29raWUgbmFtZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJhY25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL3N0aWNreS1zZXNzaW9ucy5odG1sXFxcIlxcblxcbl9wZl9lbGJhY25fYXR0cihuYW1lLCBrZXkpIDo9IHYgaWYge1xcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG9iamVjdC5nZXQoZW50cnksIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0ga2V5XFxuXFx0diA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVmFsdWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcbn1cXG5cXG5fcGZfZWxiYWNuX2hhcyhuYW1lLCBrZXkpIGlmIF9wZl9lbGJhY25fYXR0cihuYW1lLCBrZXkpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1hcHAtY29va2llLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIsXFxuXFx0XFxcInN0aWNraW5lc3MudHlwZSBhcHBfY29va2llIGhhcyBubyBzdGlja2luZXNzLmFwcF9jb29raWUuY29va2llX25hbWUgKFxcXFxcXFwiWW91IG11c3Qgc2V0IGFuIGFwcGxpY2F0aW9uIGNvb2tpZSBuYW1lIHRvIGVuYWJsZSBzdGlja2luZXNzIG9mIHR5cGUgJ2FwcF9jb29raWUnXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiQWRkIHRoZSBzdGlja2luZXNzLmFwcF9jb29raWUuY29va2llX25hbWUgYXR0cmlidXRlXFxcIixcXG5cXHRfcGZfZWxiYWNuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0X3BmX2VsYmFjbl9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLmVuYWJsZWRcXFwiKSA9PSBcXFwidHJ1ZVxcXCJcXG5cXHRfcGZfZWxiYWNuX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJhcHBfY29va2llXFxcIlxcblxcdG5vdCBfcGZfZWxiYWNuX2hhcyhuYW1lLCBcXFwic3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1oYy10aW1lb3V0LWludGVydmFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSGVhbHRoIGNoZWNrIHRpbWVvdXQgbXVzdCBiZSBzdHJpY3RseSBzbWFsbGVyIHRoYW4gdGhlIGludGVydmFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFcXVhbGl0eSBpcyByZWplY3RlZCB0b28gKGJlbmNoZWQpOiB0aGUgcmVxdWlyZW1lbnQgaXMgc3RyaWN0bHkgbGVzcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWhjLXRpbWVvdXQtaW50ZXJ2YWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrVGltZW91dFNlY29uZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkhlYWx0aENoZWNrVGltZW91dFNlY29uZHMgJXYgaXMgbm90IHNtYWxsZXIgdGhhbiBIZWFsdGhDaGVja0ludGVydmFsU2Vjb25kcyAldiAoXFxcXFxcXCJIZWFsdGggY2hlY2sgdGltZW91dCAnJXYnIG11c3QgYmUgc21hbGxlciB0aGFuIHRoZSBpbnRlcnZhbCAnJXYnXFxcXFxcXCIpXFxcIiwgW3QsIGksIHQsIGldKSxcXG5cXHRcXFwiS2VlcCB0aGUgdGltZW91dCBzdHJpY3RseSBiZWxvdyB0aGUgaW50ZXJ2YWxcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFyZ2V0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tUaW1lb3V0U2Vjb25kc1xcXCIpKVxcblxcdGkgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tJbnRlcnZhbFNlY29uZHNcXFwiKSlcXG5cXHR0ID49IGlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYW1iZGEtdGFyZ2V0LXByb3RvY29sXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIHRhcmdldCBncm91cHMgY2Fubm90IHNwZWNpZnkgUHJvdG9jb2xcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxhbWJkYS10YXJnZXQtcHJvdG9jb2xcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIixcXG5cXHRcXFwiVGFyZ2V0VHlwZSBsYW1iZGEgY2Fubm90IHRha2UgUHJvdG9jb2wgKFxcXFxcXFwiUHJvdG9jb2wgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgdGFyZ2V0IGdyb3VwcyB3aXRoIHRhcmdldCB0eXBlICdsYW1iZGEnXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3RvY29sIGZyb20gdGhlIGxhbWJkYSB0YXJnZXQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFyZ2V0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0VHlwZVxcXCIpID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlByb3RvY29sXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFMQiBpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0MDAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPCAxXFxuXFxuX3BmX2lkbGVfdGltZW91dF9vdXQobikgaWYgbiA+IDQwMDBcXG5cXG5fcGZfbm9uX2FsYihuYW1lKSBpZiB7XFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKVxcblxcdHQgIT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIGlzICV2IGJ1dCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMSBhbmQgNDAwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlcnMuaHRtbCNjb25uZWN0aW9uLWlkbGUtdGltZW91dFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRub3QgX3BmX25vbl9hbGIobmFtZSlcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlckF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2lkbGVfdGltZW91dF9vdXQobnVtKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWxiLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMb2FkIGJhbGFuY2VyIG5hbWVzIGFyZSBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYy9oeXBoZW4gY2hhcnMgYW5kIGNhbm5vdCBiZWdpbiB3aXRoIGludGVybmFsLSBvciBhIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxibmFtZV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMb2FkQmFsYW5jZXIuaHRtbFxcXCJcXG5cXG5fcGZfZWxibmFtZV9iYWQgY29udGFpbnMgW25hbWUsIG4sIHdoeV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRzdGFydHN3aXRoKG4sIFxcXCJpbnRlcm5hbC1cXFwiKVxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlZ2luIHdpdGggJ2ludGVybmFsLSdcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGVuZHN3aXRoKG4sIFxcXCItXFxcIilcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBlbmQgd2l0aCBhIGh5cGhlbigtKVxcXCJcXG59XFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0c3RhcnRzd2l0aChuLCBcXFwiLVxcXCIpXFxuXFx0d2h5IDo9IFxcXCJjYW5ub3QgYmVnaW4gd2l0aCBhIGh5cGhlbigtKVxcXCJcXG59XFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0Y291bnQobikgPiAzMlxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlIGxvbmdlciB0aGFuICczMicgY2hhcmFjdGVyc1xcXCJcXG59XFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOS1dKiRgLCBuKVxcblxcdHdoeSA6PSBcXFwiY2FuIG9ubHkgY29udGFpbiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zKC0pXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxiLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgJyVzJyAlczsgRUxCIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW24sIHdoeV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGxvYWQgYmFsYW5jZXIgdG8gYXQgbW9zdCAzMiBhbHBoYW51bWVyaWMgb3IgaHlwaGVuIGNoYXJhY3RlcnMsIHdpdGhvdXQgYSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbiBvciB0aGUgcmVzZXJ2ZWQgaW50ZXJuYWwtIHByZWZpeFxcXCIsXFxuXFx0X3BmX2VsYm5hbWVfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbiwgd2h5XSBpbiBfcGZfZWxibmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1saXN0ZW5lci1wcm90b2NvbC1sYi10eXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGlzdGVuZXIgcHJvdG9jb2xzIG11c3QgbWF0Y2ggdGhlIGxvYWQgYmFsYW5jZXIgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQWxsb3ctc2V0cyB2ZXJiYXRpbSBmcm9tIHRoZSB0d28gYmVuY2hlZCBzZXJ2aWNlIGVycm9ycy5cXG5fcGZfZWxibHB0X2FsbG93IDo9IHtcXFwiYXBwbGljYXRpb25cXFwiOiB7XFxcIkhUVFBcXFwiLCBcXFwiSFRUUFNcXFwifSwgXFxcIm5ldHdvcmtcXFwiOiB7XFxcIlRDUFxcXCIsIFxcXCJRVUlDXFxcIiwgXFxcIlRDUF9RVUlDXFxcIiwgXFxcIlVEUFxcXCIsIFxcXCJUQ1BfVURQXFxcIiwgXFxcIlRMU1xcXCJ9fVxcblxcbl9wZl9lbGJscHRfdHlwZShsYikgOj0gdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW2xiXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlR5cGVcXFwiLCBcXFwiYXBwbGljYXRpb25cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxpc3RlbmVyLXByb3RvY29sLWxiLXR5cGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMaXN0ZW5lciBwcm90b2NvbCAnJXMnIGlzIG5vdCB2YWxpZCBmb3IgYSAlcyBsb2FkIGJhbGFuY2VyIChhbGxvd2VkOiAldilcXFwiLCBbcHJvdG8sIHQsIGFsbG93XSksXFxuXFx0XFxcIlVzZSBIVFRQL0hUVFBTIG9uIGFwcGxpY2F0aW9uIExCcyBhbmQgVENQL1VEUC9UTFMvUVVJQyB2YXJpYW50cyBvbiBuZXR3b3JrIExCc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMaXN0ZW5lci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclxcXCIpXFxuXFx0bGIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBcm5cXFwiKVxcblxcdGxiIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0dCA6PSBfcGZfZWxibHB0X3R5cGUobGIpXFxuXFx0YWxsb3cgOj0gX3BmX2VsYmxwdF9hbGxvd1t0XVxcblxcdHByb3RvIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKVxcblxcdGlzX3N0cmluZyhwcm90bylcXG5cXHRub3QgcHJvdG8gaW4gYWxsb3dcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1ydWxlLXByaW9yaXR5LXVuaXF1ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpc3RlbmVyIHJ1bGVzIG9uIHRoZSBzYW1lIGxpc3RlbmVyIG11c3QgaGF2ZSBkaXN0aW5jdCBwcmlvcml0aWVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgcmVzb2x2ZSgpIHR1cm5zIGEgUmVmL0dldEF0dCB0byBhIHNpYmxpbmcgbGlzdGVuZXIgaW50byBpdHMgbG9naWNhbFxcbiMgaWQsIHNvIGJvdGggUmVmLXdpcmVkIGFuZCBpZGVudGljYWwtbGl0ZXJhbCBMaXN0ZW5lckFybnMgY29tcGFyZSBlcXVhbC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXJ1bGUtcHJpb3JpdHktdW5pcXVlXFxcIiwgXFxcIkVSUk9SXFxcIiwgcjIsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIlByaW9yaXR5ICV2IGlzIGFsc28gdXNlZCBieSAnJXMnIG9uIHRoZSBzYW1lIGxpc3RlbmVyIChcXFxcXFxcIlByaW9yaXR5ICcldicgaXMgY3VycmVudGx5IGluIHVzZVxcXFxcXFwiKVxcXCIsIFtwMSwgcjEsIHAxXSksXFxuXFx0XFxcIkdpdmUgZWFjaCBydWxlIG9uIGEgbGlzdGVuZXIgYSBkaXN0aW5jdCBwcmlvcml0eVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVSdWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSByMSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGVcXFwiKVxcblxcdHNvbWUgcjIgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXFxcIilcXG5cXHRyMSA8IHIyXFxuXFx0bDEgOj0gcmVzb2x2ZShyMSwgXFxcIlByb3BlcnRpZXMuTGlzdGVuZXJBcm5cXFwiKVxcblxcdGwyIDo9IHJlc29sdmUocjIsIFxcXCJQcm9wZXJ0aWVzLkxpc3RlbmVyQXJuXFxcIilcXG5cXHRsMSA9PSBsMlxcblxcdHAxIDo9IHRvX251bWJlcihyZXNvbHZlKHIxLCBcXFwiUHJvcGVydGllcy5Qcmlvcml0eVxcXCIpKVxcblxcdHAyIDo9IHRvX251bWJlcihyZXNvbHZlKHIyLCBcXFwiUHJvcGVydGllcy5Qcmlvcml0eVxcXCIpKVxcblxcdHAxID09IHAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItc3RpY2tpbmVzcy10eXBlLXByb3RvY29sXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RpY2tpbmVzcyB0eXBlIGxiX2Nvb2tpZSBuZWVkcyBhbiBIVFRQLXByb3RvY29sIHRhcmdldCBncm91cCwgc291cmNlX2lwIGEgVENQIG9uZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJzdHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL3N0aWNreS1zZXNzaW9ucy5odG1sXFxcIlxcblxcbl9wZl9lbGJzdHBfYXR0cihuYW1lLCBrZXkpIDo9IHYgaWYge1xcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG9iamVjdC5nZXQoZW50cnksIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0ga2V5XFxuXFx0diA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVmFsdWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcbn1cXG5cXG4jIE9ubHkgdGhlIHR3byBiZW5jaGVkIHBhaXJzIGFyZSBjbGFpbWVkLlxcbl9wZl9lbGJzdHBfYmFkKG5hbWUpIDo9IFtcXFwibGJfY29va2llXFxcIiwgXFxcIlRDUFxcXCJdIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIikgPT0gXFxcIlRDUFxcXCJcXG5cXHRfcGZfZWxic3RwX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJsYl9jb29raWVcXFwiXFxufVxcblxcbl9wZl9lbGJzdHBfYmFkKG5hbWUpIDo9IFtcXFwic291cmNlX2lwXFxcIiwgXFxcIkhUVFBcXFwiXSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJIVFRQXFxcIlxcblxcdF9wZl9lbGJzdHBfYXR0cihuYW1lLCBcXFwic3RpY2tpbmVzcy50eXBlXFxcIikgPT0gXFxcInNvdXJjZV9pcFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1zdGlja2luZXNzLXR5cGUtcHJvdG9jb2xcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiU3RpY2tpbmVzcyB0eXBlICclcycgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGFyZ2V0IGdyb3VwcyB3aXRoIHRoZSAlcyBwcm90b2NvbFxcXCIsIFtwYWlyWzBdLCBwYWlyWzFdXSksXFxuXFx0XFxcIlVzZSBzb3VyY2VfaXAgc3RpY2tpbmVzcyBmb3IgVENQIHRhcmdldCBncm91cHMgYW5kIGNvb2tpZSBzdGlja2luZXNzIGZvciBIVFRQIG9uZXNcXFwiLFxcblxcdF9wZl9lbGJzdHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRwYWlyIDo9IF9wZl9lbGJzdHBfYmFkKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGNwLWhlYWx0aC1jaGVjay1wYXRoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVENQIGhlYWx0aCBjaGVja3MgY2Fubm90IHRha2UgYSBoZWFsdGggY2hlY2sgcGF0aFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJ0Y2hwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiXFxuXFxuX3BmX2VsYnRjaHBfdGNwX2hjKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tQcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxuXFxuIyBIZWFsdGhDaGVja1Byb3RvY29sIGRlZmF1bHRzIHRvIHRoZSB0YXJnZXQgZ3JvdXAgcHJvdG9jb2wgKGJlbmNoZWQgdmlhIGUwNGIpLlxcbl9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkhlYWx0aENoZWNrUHJvdG9jb2xcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGNwLWhlYWx0aC1jaGVjay1wYXRoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja1BhdGhcXFwiLFxcblxcdFxcXCJUaGUgZWZmZWN0aXZlIGhlYWx0aCBjaGVjayBwcm90b2NvbCBpcyBUQ1AsIHdoaWNoIGNhbm5vdCB0YWtlIEhlYWx0aENoZWNrUGF0aCAoXFxcXFxcXCJIZWFsdGggY2hlY2sgcGF0aHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFRDUCBoZWFsdGggY2hlY2tzXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIEhlYWx0aENoZWNrUGF0aCwgb3IgdXNlIGFuIEhUVFAvSFRUUFMgaGVhbHRoIGNoZWNrIHByb3RvY29sXFxcIixcXG5cXHRfcGZfZWxidGNocF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdF9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJIZWFsdGhDaGVja1BhdGhcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctZGVyZWdpc3RyYXRpb24tZGVsYXktcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgZ3JvdXAgZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RlcmVnX2RlbGF5X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA+IDM2MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzIGlzICV2IGJ1dCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzIHRvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAzNjAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9lZGl0LXRhcmdldC1ncm91cC1hdHRyaWJ1dGVzLmh0bWwjZGVyZWdpc3RyYXRpb24tZGVsYXlcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9kZXJlZ19kZWxheV9vdXQobnVtKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgZ3JvdXAgbmFtZXMgYXJlIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljL2h5cGhlbiBjaGFycyBhbmQgY2Fubm90IHN0YXJ0IG9yIGVuZCB3aXRoIGEgaHlwaGVuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3RnbmFtZV9iYWQobikgOj0gXFxcImNhbm5vdCBiZSBsb25nZXIgdGhhbiAzMiBjaGFyYWN0ZXJzXFxcIiBpZiBjb3VudChuKSA+IDMyXFxuXFxuX3BmX3RnbmFtZV9iYWQobikgOj0gXFxcIm1heSB1c2Ugb25seSBhbHBoYW51bWVyaWNzIGFuZCBoeXBoZW5zLCBhbmQgY2Fubm90IHN0YXJ0IG9yIGVuZCB3aXRoIGEgaHlwaGVuXFxcIiBpZiB7XFxuXFx0Y291bnQobikgPD0gMzJcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XShbQS1aYS16MC05LV0qW0EtWmEtejAtOV0pPyRgLCBuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSB0YXJnZXQgZ3JvdXAgbmFtZSAnJXMnICVzOyBFTEIgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGxcXFwiLCBbbiwgd2h5XSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFyZ2V0IGdyb3VwIHRvIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljIG9yIGh5cGhlbiBjaGFyYWN0ZXJzLCBub3Qgc3RhcnRpbmcgb3IgZW5kaW5nIHdpdGggYSBoeXBoZW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFyZ2V0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHR3aHkgOj0gX3BmX3RnbmFtZV9iYWQobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1zbG93LXN0YXJ0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIHNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBtdXN0IGJlIDAgb3IgYmV0d2VlbiAzMCBhbmQgOTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIHtcXG5cXHRuID4gMFxcblxcdG4gPCAzMFxcbn1cXG5cXG5fcGZfc2xvd19zdGFydF9vdXQobikgaWYgbiA+IDkwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSAwIChkaXNhYmxlZCkgb3IgYmV0d2VlbiAzMCBhbmQgOTAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgdG8gMCBvciBhIHZhbHVlIGJldHdlZW4gMzAgYW5kIDkwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI3Nsb3ctc3RhcnQtbW9kZVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nsb3dfc3RhcnRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklucHV0VGVtcGxhdGUgcGxhY2Vob2xkZXJzIG11c3QgYmUgZGVjbGFyZWQgaW4gSW5wdXRQYXRoc01hcFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IDxwbGFjZWhvbGRlcj4gaW4gSW5wdXRUZW1wbGF0ZSBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXAsXFxuIyBleGNlcHQgdGhlIGF3cy5ldmVudHMuKiBwcmVkZWZpbmVkIHZhcmlhYmxlcy4gQW4gSW5wdXRQYXRoc01hcCB0aGF0IGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIChub3JtYWxpemVkIHdpdGggX18tcHJlZml4ZWQgbWFya2VyIGtleXMpIG1ha2VzIHRoZVxcbiMgZGVjbGFyZWQgc2V0IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbCkgOj0ge3N1YnN0cmluZyhmLCAxLCBjb3VudChmKSAtIDIpIHwgc29tZSBmIGluIHJlZ2V4LmZpbmRfbihgPChbQS1aYS16MC05Xy4tXSspPmAsIHRtcGwsIC0xKX1cXG5cXG5fcGZfZXZpdHBfcGxhaW5fbWFwKHBtKSBpZiB7XFxuXFx0aXNfb2JqZWN0KHBtKVxcblxcdGV2ZXJ5IGssIF8gaW4gcG0ge1xcblxcdFxcdG5vdCBzdGFydHN3aXRoKGssIFxcXCJfX1xcXCIpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1pbnB1dC10cmFuc2Zvcm1lci1wbGFjZWhvbGRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0cy4lZC5JbnB1dFRyYW5zZm9ybWVyLklucHV0VGVtcGxhdGVcXFwiLCBbdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIklucHV0VGVtcGxhdGUgdXNlcyA8JXM+IGJ1dCBJbnB1dFBhdGhzTWFwIGRvZXMgbm90IGRlY2xhcmUgaXQ7IFB1dFRhcmdldHMgZmFpbHMgd2l0aCBcXFxcXFxcIklucHV0VGVtcGxhdGUgZm9yIHRhcmdldCAlcyBjb250YWlucyBpbnZhbGlkIHBsYWNlaG9sZGVyICVzXFxcXFxcXCJcXFwiLCBbcCwgdGlkLCBwXSksXFxuXFx0c3ByaW50ZihcXFwiQWRkICclcycgdG8gSW5wdXRQYXRoc01hcCwgb3IgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlciBmcm9tIHRoZSB0ZW1wbGF0ZVxcXCIsIFtwXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLXRyYW5zZm9ybS10YXJnZXQtaW5wdXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldHNcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdGl0IDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIklucHV0VHJhbnNmb3JtZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChpdClcXG5cXHR0bXBsIDo9IG9iamVjdC5nZXQoaXQsIFxcXCJJbnB1dFRlbXBsYXRlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodG1wbClcXG5cXHRwbSA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRQYXRoc01hcFxcXCIsIHt9KVxcblxcdF9wZl9ldml0cF9wbGFpbl9tYXAocG0pXFxuXFx0c29tZSBwIGluIF9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbClcXG5cXHRub3Qgc3RhcnRzd2l0aChwLCBcXFwiYXdzLmV2ZW50cy5cXFwiKVxcblxcdG5vdCBwbVtwXVxcblxcdHRpZCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJZFxcXCIsIFxcXCI8dGFyZ2V0PlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gZW1wdHkgRXZlbnRQYXR0ZXJuIGNvdW50cyBhcyBubyBwYXR0ZXJuIGF0IGFsbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUncyBGMzA1OCBmaXJlcyB3aGVuIHRoZSBFdmVudFBhdHRlcm4gS0VZIGlzIGFic2VudCwgYnV0IGFuIGVtcHR5XFxuIyBvYmplY3QgcGFzc2VzIHRoZSBzY2hlbWEgYW5kIHRoZSBoYW5kbGVyIHRoZW4gdHJlYXRzIGl0IGFzIG5vIHBhdHRlcm4gYXRcXG4jIGFsbC4gRmlyZXMgb25seSB3aGVuIFNjaGVkdWxlRXhwcmVzc2lvbiBpcyBhbHNvIGxpdGVyYWxseSBhYnNlbnQg4oCUIHRoZVxcbiMgYmVuY2gtdmVyaWZpZWQgc2hhcGUgKGFic2VuY2UgcHJvdmVuIHZpYSBpbnB1dC5yZXNvdXJjZXMsIHNlZSBBR0VOVFMubWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIsXFxuXFx0XFxcIkV2ZW50UGF0dGVybiBpcyBhbiBlbXB0eSBvYmplY3QsIHdoaWNoIHRoZSBoYW5kbGVyIHRyZWF0cyBhcyBubyBwYXR0ZXJuOyBQdXRSdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXJhbWV0ZXIocykgRXZlbnRQYXR0ZXJuIG9yIFNjaGVkdWxlRXhwcmVzc2lvbiBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiR2l2ZSBFdmVudFBhdHRlcm4gYXQgbGVhc3Qgb25lIG1hdGNoZXIgKGUuZy4gc291cmNlKSwgb3IgdXNlIFNjaGVkdWxlRXhwcmVzc2lvbiBpbnN0ZWFkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdGNvdW50KGVwKSA9PSAwXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlbnQgcGF0dGVybiB2YWx1ZXMgbXVzdCBiZSBhcnJheXMgb3Igb2JqZWN0cywgbm90IHNjYWxhcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX251bWJlcih2KVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfYm9vbGVhbih2KVxcblxcbiMgRXZlcnkgbWF0Y2hlciBpbiBhbiBldmVudCBwYXR0ZXJuIG11c3QgYmUgYW4gYXJyYXkgKG9yIGFuIG9iamVjdCBob2xkaW5nXFxuIyBvcGVyYXRvcnMpOyBhIGJhcmUgc2NhbGFyIGlzIHJlamVjdGVkIHBlciBrZXkuIE9ubHkgdGhlIHRvcCBsZXZlbCBpc1xcbiMgY2hlY2tlZCDigJQgdGhhdCBpcyB0aGUgYmVuY2gtdmVyaWZpZWQgc2NvcGUsIGFuZCBpdCBkb2RnZXMgb3BlcmF0b3Igb2JqZWN0c1xcbiMgbGlrZSB7XFxcInByZWZpeFxcXCI6IFxcXCIuLi5cXFwifSB0aGF0IGxlZ2FsbHkgY2Fycnkgc2NhbGFycyBkZWVwZXIgZG93bi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLXNjYWxhci12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm4uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkV2ZW50UGF0dGVybiBrZXkgJyVzJyBob2xkcyBhIGJhcmUgc2NhbGFyOyBQdXRSdWxlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkV2ZW50IHBhdHRlcm4gaXMgbm90IHZhbGlkLiBSZWFzb246IFxcXFxcXFxcXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlcXFxcXFxcIlxcXCIsIFtrLCBrXSksXFxuXFx0c3ByaW50ZihcXFwiV3JhcCB0aGUgdmFsdWUgaW4gYW4gYXJyYXk6IFxcXFxcXFwiJXNcXFxcXFxcIjogWy4uLl1cXFwiLCBba10pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi1ldmVudC1wYXR0ZXJucy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFdmVudHM6OlJ1bGVcXFwiKVxcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuXFxcIilcXG5cXHRpc19vYmplY3QoZXApXFxuXFx0c29tZSBrLCB2IGluIGVwXFxuXFx0X3BmX2V2cHN2X3NjYWxhcih2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWZpcmVob3NlLWRmY2MtcmVxdWlyZWQtY29uZmlnc1wiLFxuICAgIFwic2VydmljZVwiOiBcImZpcmVob3NlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsZWQgZm9ybWF0IGNvbnZlcnNpb24gbmVlZHMgaW5wdXQsIG91dHB1dCwgYW5kIHNjaGVtYSBjb25maWdzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB0aHJlZSBzdWItY29uZmlndXJhdGlvbnMgYXJlIHVuY29uZGl0aW9uYWxseSByZXF1aXJlZCBvbmNlIEVuYWJsZWRcXG4jIGlzIHRydWU7IHRoZSBzZXJ2aWNlIHJlamVjdHMgZWFjaCBhYnNlbmNlIGluIHR1cm4uIFJlYWQgZnJvbSB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2ZoZGZjY19vdXRlcihuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbl9wZl9maGRmY2NfY29uZihuYW1lKSA6PSBjIGlmIHtcXG5cXHR4IDo9IF9wZl9maGRmY2Nfb3V0ZXIobmFtZSlcXG5cXHRjIDo9IG9iamVjdC5nZXQoeCwgXFxcIkRhdGFGb3JtYXRDb252ZXJzaW9uQ29uZmlndXJhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWRmY2MtcmVxdWlyZWQtY29uZmlnc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkRhdGFGb3JtYXRDb252ZXJzaW9uQ29uZmlndXJhdGlvbi4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiRGF0YSBmb3JtYXQgY29udmVyc2lvbiBpcyBlbmFibGVkIHdpdGhvdXQgJXM7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCIlcyBtdXN0IG5vdCBiZSBudWxsXFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdFxcXCJTZXQgSW5wdXRGb3JtYXRDb25maWd1cmF0aW9uLCBPdXRwdXRGb3JtYXRDb25maWd1cmF0aW9uLCBhbmQgU2NoZW1hQ29uZmlndXJhdGlvbiB0b2dldGhlclxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMta2luZXNpc2ZpcmVob3NlLWRlbGl2ZXJ5c3RyZWFtLWRhdGFmb3JtYXRjb252ZXJzaW9uY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRjIDo9IF9wZl9maGRmY2NfY29uZihuYW1lKVxcblxcdGNvZXJjZV90b19ib29sKG9iamVjdC5nZXQoYywgXFxcIkVuYWJsZWRcXFwiLCBmYWxzZSkpID09IHRydWVcXG5cXHRzb21lIGsgaW4ge1xcXCJJbnB1dEZvcm1hdENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiT3V0cHV0Rm9ybWF0Q29uZmlndXJhdGlvblxcXCIsIFxcXCJTY2hlbWFDb25maWd1cmF0aW9uXFxcIn1cXG5cXHRvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1idWZmZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEeW5hbWljIHBhcnRpdGlvbmluZyBuZWVkcyBhIDY0IE1CIGJ1ZmZlciBmbG9vclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIGZsb29yIGlzIDE7IHRoZSA2NCBmbG9vciBvbmx5IGFwcGxpZXMgd2l0aCBkeW5hbWljXFxuIyBwYXJ0aXRpb25pbmcgb24gLSBhIGNvbmRpdGlvbmFsIGJvdW5kIG5vIHNjaGVtYSBsYXllciBjYW4gZXhwcmVzcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWR5bmFtaWMtcGFydGl0aW9uaW5nLWJ1ZmZlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5CdWZmZXJpbmdIaW50cy5TaXplSW5NQnNcXFwiLFxcblxcdHNwcmludGYoXFxcIlNpemVJbk1CcyAldiB3aXRoIGR5bmFtaWMgcGFydGl0aW9uaW5nOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzIG11c3QgYmUgYXQgbGVhc3QgNjQgd2hlbiBEeW5hbWljIFBhcnRpdGlvbmluZyBpcyBlbmFibGVkLlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiUmFpc2UgU2l6ZUluTUJzIHRvIGF0IGxlYXN0IDY0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0tZHluYW1pY3BhcnRpdGlvbmluZ2NvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkR5bmFtaWNQYXJ0aXRpb25pbmdDb25maWd1cmF0aW9uLkVuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5CdWZmZXJpbmdIaW50cy5TaXplSW5NQnNcXFwiKSlcXG5cXHRzIDwgNjRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1wcmVmaXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEeW5hbWljIHBhcnRpdGlvbmluZyBuZWVkcyBwYXJ0aXRpb24gbmFtZXNwYWNlcyBpbiB0aGUgcHJlZml4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhcnRpdGlvbmVkIGRlbGl2ZXJ5IGhhcyBub3doZXJlIHRvIHB1dCB0aGUga2V5cyB1bmxlc3MgdGhlIHByZWZpeFxcbiMgaW50ZXJwb2xhdGVzIHRoZW0gdmlhICF7cGFydGl0aW9uS2V5RnJvbS4uLn0gbmFtZXNwYWNlcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWR5bmFtaWMtcGFydGl0aW9uaW5nLXByZWZpeFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5QcmVmaXhcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZpeCAnJXMnIGhhcyBubyBwYXJ0aXRpb24gbmFtZXNwYWNlOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUzMgUHJlZml4IHNob3VsZCBjb250YWluIER5bmFtaWMgUGFydGl0aW9uaW5nIG5hbWVzcGFjZXMgd2hlbiBEeW5hbWljIFBhcnRpdGlvbmluZyBpcyBlbmFibGVkXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJJbnRlcnBvbGF0ZSBhdCBsZWFzdCBvbmUgIXtwYXJ0aXRpb25LZXlGcm9tUXVlcnk6Li4ufSBvciAhe3BhcnRpdGlvbktleUZyb21MYW1iZGE6Li4ufSBpbnRvIHRoZSBwcmVmaXhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZmlyZWhvc2UvbGF0ZXN0L2Rldi9keW5hbWljLXBhcnRpdGlvbmluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uRHluYW1pY1BhcnRpdGlvbmluZ0NvbmZpZ3VyYXRpb24uRW5hYmxlZFxcXCIpKSA9PSB0cnVlXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocClcXG5cXHRub3QgY29udGFpbnMocCwgXFxcIiF7cGFydGl0aW9uS2V5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1raW5lc2lzLXNvdXJjZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLaW5lc2lzU3RyZWFtQXNTb3VyY2Ugc3RyZWFtcyBuZWVkIEtpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhpcyBkaXJlY3Rpb24gaXMgYSBkZXBsb3kgZmFpbHVyZSAtIERpcmVjdFB1dCB3aXRoIGEgKHNpbGVudGx5XFxuIyBpZ25vcmVkKSBzb3VyY2UgY29uZmlndXJhdGlvbiBkZXBsb3lzIGZpbmUgKGJlbmNoIGYwNikuIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maGtzY19taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2Uta2luZXNpcy1zb3VyY2UtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU291cmNlQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkRlbGl2ZXJ5U3RyZWFtVHlwZSBpcyBLaW5lc2lzU3RyZWFtQXNTb3VyY2UgYnV0IG5vIHNvdXJjZSBjb25maWd1cmF0aW9uIGlzIHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIktpbmVzaXNTb3VyY2VTdHJlYW1Db25maWcgaXMgbWFuZGF0b3J5IGZvciBLaW5lc2lzU3RyZWFtQXNTb3VyY2Ugc3RyZWFtIHR5cGUuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgc3RyZWFtIEFSTiBhbmQgcm9sZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlbGl2ZXJ5U3RyZWFtVHlwZVxcXCIpID09IFxcXCJLaW5lc2lzU3RyZWFtQXNTb3VyY2VcXFwiXFxuXFx0X3BmX2Zoa3NjX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1vbmUtZGVzdGluYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRlbGl2ZXJ5IHN0cmVhbSB0YWtlcyBleGFjdGx5IG9uZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggZGlyZWN0aW9ucyBkZXBsb3ktdmVyaWZpZWQ6IG5vbmUgc2V0LCBhbmQgdHdvIHNldC4gS2V5IHByZXNlbmNlIGlzXFxuIyByZWFkIGZyb20gdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2Zob2RfZGVzdHMgOj0ge1xcblxcdFxcXCJTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJSZWRzaGlmdERlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkVsYXN0aWNzZWFyY2hEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBbWF6b25vcGVuc2VhcmNoc2VydmljZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkFtYXpvbk9wZW5TZWFyY2hTZXJ2ZXJsZXNzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiU3BsdW5rRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSHR0cEVuZHBvaW50RGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiU25vd2ZsYWtlRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSWNlYmVyZ0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2Utb25lLWRlc3RpbmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgZGVzdGluYXRpb24gY29uZmlndXJhdGlvbnMgYXJlIHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgc3VwcG9ydGVkIGZvciBhIEZpcmVob3NlXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgKkRlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRuIDo9IGNvdW50KFtrIHwgc29tZSBrIGluIF9wZl9maG9kX2Rlc3RzOyBvYmplY3QuZ2V0KHByb3BzLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1zMy1iYWNrdXAtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5hYmxpbmcgUzMgYmFja3VwIG5lZWRzIFMzQmFja3VwQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCYWNrdXAgbW9kZSBwb2ludHMgZGVsaXZlcmllcyBhdCBhIHNlY29uZCBidWNrZXQgdGhhdCBtdXN0IGJlXFxuIyBjb25maWd1cmVkLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgRXh0ZW5kZWRTMyBkZXN0aW5hdGlvbi4gQWJzZW5jZSBpc1xcbiMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2Zoc2JjX291dGVyKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1zMy1iYWNrdXAtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLlMzQmFja3VwQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlMzQmFja3VwTW9kZSBpcyBFbmFibGVkIGJ1dCBTM0JhY2t1cENvbmZpZ3VyYXRpb24gaXMgbm90IHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIGJhY2t1cCBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIHdoZW4gZW5hYmxpbmcgUzMgYmFja3VwLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFMzQmFja3VwQ29uZmlndXJhdGlvbiAoYnVja2V0IGFuZCByb2xlKSwgb3IgZHJvcCBTM0JhY2t1cE1vZGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS1leHRlbmRlZHMzZGVzdGluYXRpb25jb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5TM0JhY2t1cE1vZGVcXFwiKSA9PSBcXFwiRW5hYmxlZFxcXCJcXG5cXHR4IDo9IF9wZl9maHNiY19vdXRlcihuYW1lKVxcblxcdG9iamVjdC5nZXQoeCwgXFxcIlMzQmFja3VwQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taWRlbnRpdHktcG9saWN5LW5vLXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJZGVudGl0eSBwb2xpY2llcyBjYW5ub3QgY2FycnkgYSBQcmluY2lwYWwgZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIElkZW50aXR5IHBvbGljaWVzIGF0dGFjaCB0byB0aGVpciBwcmluY2lwYWwgaW1wbGljaXRseTsgdGhlIGZpZWxkXFxuIyBiZWxvbmdzIHRvIHJlc291cmNlLWJhc2VkIHBvbGljaWVzLlxcbl9wZl9paW5wX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWlucF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWlucF9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWlucF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWlkZW50aXR5LXBvbGljeS1uby1wcmluY2lwYWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5QcmluY2lwYWxcXFwiLCBbcGF0aCwgaV0pLFxcblxcdFxcXCJJZGVudGl0eSBwb2xpY3kgc3RhdGVtZW50IGhhcyBhIFByaW5jaXBhbCBmaWVsZDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUG9saWN5IGRvY3VtZW50IHNob3VsZCBub3Qgc3BlY2lmeSBhIHByaW5jaXBhbC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcmluY2lwYWwgKGlkZW50aXR5IHBvbGljaWVzIGFwcGx5IHRvIHRoZSBpZGVudGl0eSB0aGV5IGF0dGFjaCB0bylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2lpbnBfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9paW5wX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1pbmxpbmUtcG9saWN5LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5saW5lIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgcGVyIGlkZW50aXR5IChyb2xlIDEwMjQwIC8gZ3JvdXAgNTEyMCAvIHVzZXIgMjA0OCBjaGFyYWN0ZXJzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6Um9sZVBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaW5saW5lX3BvbGljeV9saW1pdHMgOj0ge1xcblxcdFxcXCJBV1M6OklBTTo6UG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlUG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyUG9saWN5XFxcIjogMjA0OCxcXG5cXHRcXFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XFxcIjogNTEyMCxcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgaW5saW5lIHBvbGljeSBsaW1pdCBmb3IgJXMgaXMgJWQgKHJvbGU6IDEwMjQwLCBncm91cDogNTEyMCwgdXNlcjogMjA0OClcXFwiLCBbc2l6ZSwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIk1vdmUgc3RhdGVtZW50cyBpbnRvIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiB0aGUgZG9jdW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBsaW1pdCBpbiBfcGZfaW5saW5lX3BvbGljeV9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0ZG9jIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChkb2MpXFxuXFx0c2l6ZSA6PSBjb3VudChqc29uLm1hcnNoYWwoZG9jKSlcXG5cXHRzaXplID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taW5zdGFuY2UtcHJvZmlsZS1zaW5nbGUtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBpbnN0YW5jZSBwcm9maWxlIGhvbGRzIGV4YWN0bHkgb25lIHJvbGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBcXFwicXVvdGFcXFwiIGlzIGEgaGFyZCBsaW1pdCBvZiBvbmUgcm9sZTsgdGhlIHNjaGVtYSBoYXMgbm8gbWF4SXRlbXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0taW5zdGFuY2UtcHJvZmlsZS1zaW5nbGUtcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm9sZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIHJvbGVzIG9uIG9uZSBpbnN0YW5jZSBwcm9maWxlOyB0aGUgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJDYW5ub3QgZXhjZWVkIHF1b3RhIGZvciBJbnN0YW5jZVNlc3Npb25zUGVySW5zdGFuY2VQcm9maWxlOiAxXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIHJvbGUgcGVyIGluc3RhbmNlIHByb2ZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1pYW0taW5zdGFuY2Vwcm9maWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlXFxcIilcXG5cXHRuIDo9IGNvdW50KGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Sb2xlc1xcXCIpKVxcblxcdG4gPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LWNvdW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hbmFnZWQgcG9saWNpZXMgcGVyIGlkZW50aXR5IGFyZSBjYXBwZWQgKGhhcmQgbWF4aW11bXMgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMg44OP44O844OJ5LiK6ZmQ77yIU2VydmljZSBRdW90YXMg44Gu44CMTWF4aW11bSBxdW90YeOAjT0g44Gd44KM5Lul5LiK5byV44GN5LiK44GS5LiN5Y+v6IO944Gq5YCk77yJOlxcbiMgICByb2xlIDI1IC8gdXNlciAyMCAvIGdyb3VwIDEw77yIZ3JvdXAg44GvIGFkanVzdGFibGU6IGZhbHNl44CB5a6f5ris44Gn44KC56K66KqN77yJ44CCXFxuIyDjg4fjg5Xjgqnjg6vjg4jvvIhyb2xlIDIwIC8gdXNlciAxMCAvIGdyb3VwIDEw77yJ6LaF44Gv44Ki44Kr44Km44Oz44OI44Gu44Kv44Kp44O844K/5byV44GN5LiK44GS5qyh56ys44GnXFxuIyDmiJDlip/jgZflvpfjgovjgZ/jgoEgRVJST1Ig44Gr44GX44Gq44GE77yIYmVuY2gg44Ki44Kr44Km44Oz44OI44GuIHJvbGU9MjAg44GnIDExIOWAi+aIkOWKn+OCkuWun+a4rOa4iOOBv++8ieOAglxcbl9wZl9pYW1wb2xfbGltaXRzIDo9IHtcXG5cXHRcXFwiQVdTOjpJQU06OlJvbGVcXFwiOiAyNSxcXG5cXHRcXFwiQVdTOjpJQU06OlVzZXJcXFwiOiAyMCxcXG5cXHRcXFwiQVdTOjpJQU06Okdyb3VwXFxcIjogMTAsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LWNvdW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYW5hZ2VkUG9saWN5QXJuc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgbWFuYWdlZCBwb2xpY2llcyBhcmUgYXR0YWNoZWQsIGJ1dCB0aGUgaGFyZCBtYXhpbXVtIGZvciAlcyBpcyAlZCAocXVvdGEgZGVmYXVsdHM6IHJvbGUgMjAsIHVzZXIgMTAsIGdyb3VwIDEwOyByYWlzYWJsZSBvbmx5IHVwIHRvIHRoZSBoYXJkIG1heGltdW0pOyBkZXBsb3ltZW50IGZhaWxzIHdpdGggTGltaXRFeGNlZWRlZFxcXCIsIFtuLCBydHlwZSwgbGltaXRdKSxcXG5cXHRcXFwiQ29uc29saWRhdGUgc3RhdGVtZW50cyBpbnRvIGZld2VyIG1hbmFnZWQgcG9saWNpZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBsaW1pdCBpbiBfcGZfaWFtcG9sX2xpbWl0c1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRhcnIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYW5hZ2VkUG9saWN5QXJuc1xcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG4gOj0gY291bnQoYXJyKVxcblxcdG4gPiBsaW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hbmFnZWQgcG9saWN5IGRvY3VtZW50cyBhcmUgbGltaXRlZCB0byA2MTQ0IGNoYXJhY3RlcnMgKHdoaXRlc3BhY2UgZXhjbHVkZWQpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQb2xpY3lEb2N1bWVudCBpcyAlZCBjaGFyYWN0ZXJzIChKU09OIHdpdGhvdXQgd2hpdGVzcGFjZSkgYnV0IHRoZSBtYW5hZ2VkIHBvbGljeSBsaW1pdCBpcyA2MTQ0XFxcIiwgW3NpemVdKSxcXG5cXHRcXFwiU3BsaXQgdGhlIGRvY3VtZW50IGludG8gbXVsdGlwbGUgbWFuYWdlZCBwb2xpY2llcyBvciBzaG9ydGVuIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCIpXFxuXFx0ZG9jIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChkb2MpXFxuXFx0c2l6ZSA6PSBjb3VudChqc29uLm1hcnNoYWwoZG9jKSlcXG5cXHRzaXplID4gNjE0NFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJQU0gZW50aXR5IG5hbWVzIGFsbG93IG9ubHkgYWxwaGFudW1lcmljcyBhbmQgKz0sLkAtX1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwXCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2lhbW5hbWVfcGF0IDo9IGBeW0EtWmEtejAtOSs9LC5AXy1dKyRgXFxuXFxuX3BmX2lhbW5hbWVfcHJvcCh0LCBwcm9wKSA6PSBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX2lhbW5hbWVfcGF0LCB2KVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSlcXG59XFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIiwgXFxcIlJvbGVOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06OlVzZXJcXFwiLCBcXFwiVXNlck5hbWVcXFwiKVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBfcGZfaWFtbmFtZV9wcm9wKFxcXCJBV1M6OklBTTo6R3JvdXBcXFwiLCBcXFwiR3JvdXBOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiLCBcXFwiTWFuYWdlZFBvbGljeU5hbWVcXFwiKVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpSb2xlXFxcIiwgXFxcIkFXUzo6SUFNOjpVc2VyXFxcIiwgXFxcIkFXUzo6SUFNOjpHcm91cFxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0diA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX2lhbW5hbWVfcGF0LCB2KVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lOYW1lXFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJJQU0gbmFtZSAnJXMnIGlzIHJlamVjdGVkOiBvbmx5IGFscGhhbnVtZXJpY3MgYW5kICsgPSAsIC4gQCBfIC0gYXJlIGFjY2VwdGVkIChub24tQVNDSUkgdGV4dCBzdWNoIGFzIEphcGFuZXNlIGlzIHJlamVjdGVkKVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgZW50aXR5IHVzaW5nIGFscGhhbnVtZXJpY3MgYW5kICsgPSAsIC4gQCBfIC0gb25seVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUm9sZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHZdIGluIF9wZl9pYW1uYW1lX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktYWN0aW9uLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY3Rpb25zIG11c3QgY2FycnkgYSBzZXJ2aWNlIHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBiYXJlIGFjdGlvbiBuYW1lIGhhcyBubyBzZXJ2aWNlIHRvIGF0dGFjaCB0by4gSW50cmluc2ljcyBpbnNpZGUgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgYXJlIG1hcmtlciBvYmplY3RzLCBzbyBpc19zdHJpbmcgbXV0ZXMgdGhlbS5cXG5fcGZfaWFmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWFmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lhZl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSBbdl0gaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2lhZl92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktYWN0aW9uLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQWN0aW9uICclcycgaGFzIG5vIHNlcnZpY2UgcHJlZml4OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJBY3Rpb25zL0NvbmRpdGlvbnMgbXVzdCBiZSBwcmVmYWNlZCBieSBhIHZlbmRvciwgZS5nLiwgaWFtLCBzZGIsIGVjMiwgZXRjLlxcXFxcXFwiXFxcIiwgW2FdKSxcXG5cXHRcXFwiV3JpdGUgYWN0aW9ucyBhcyBzZXJ2aWNlOkFjdGlvbiAoZS5nLiBzMzpHZXRPYmplY3QpLCBvciAqXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pYWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pYWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIGEgaW4gX3BmX2lhZl92YWxzKG9iamVjdC5nZXQocywgXFxcIkFjdGlvblxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcoYSlcXG5cXHRhICE9IFxcXCIqXFxcIlxcblxcdG5vdCBjb250YWlucyhhLCBcXFwiOlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29uZGl0aW9uIG9wZXJhdG9ycyBjb21lIGZyb20gYSBjbG9zZWQgZ3JhbW1hclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQmFzZSBvcGVyYXRvcnMgcGx1cyB0aGUgSWZFeGlzdHMgc3VmZml4IGFuZCBzZXQtb3BlcmF0b3IgcHJlZml4ZXMuXFxuIyBBIHR5cG8gbGlrZSBTdHJpbmdFcXVhbC9TdHJpbmdFcXVhbHogaXMgdW5yZWFjaGFibGUgZm9yIGV2ZXJ5IG90aGVyXFxuIyBsYXllciBiZWNhdXNlIHRoZSBkb2N1bWVudCBpcyBvcGFxdWUganNvbi5cXG5fcGZfaWNvX2Jhc2UgOj0ge1xcblxcdFxcXCJTdHJpbmdFcXVhbHNcXFwiLCBcXFwiU3RyaW5nTm90RXF1YWxzXFxcIiwgXFxcIlN0cmluZ0VxdWFsc0lnbm9yZUNhc2VcXFwiLCBcXFwiU3RyaW5nTm90RXF1YWxzSWdub3JlQ2FzZVxcXCIsXFxuXFx0XFxcIlN0cmluZ0xpa2VcXFwiLCBcXFwiU3RyaW5nTm90TGlrZVxcXCIsXFxuXFx0XFxcIk51bWVyaWNFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY05vdEVxdWFsc1xcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5cXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuRXF1YWxzXFxcIixcXG5cXHRcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuXFxcIiwgXFxcIk51bWVyaWNHcmVhdGVyVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVFcXVhbHNcXFwiLCBcXFwiRGF0ZU5vdEVxdWFsc1xcXCIsIFxcXCJEYXRlTGVzc1RoYW5cXFwiLCBcXFwiRGF0ZUxlc3NUaGFuRXF1YWxzXFxcIixcXG5cXHRcXFwiRGF0ZUdyZWF0ZXJUaGFuXFxcIiwgXFxcIkRhdGVHcmVhdGVyVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkJvb2xcXFwiLCBcXFwiQmluYXJ5RXF1YWxzXFxcIiwgXFxcIklwQWRkcmVzc1xcXCIsIFxcXCJOb3RJcEFkZHJlc3NcXFwiLFxcblxcdFxcXCJBcm5FcXVhbHNcXFwiLCBcXFwiQXJuTGlrZVxcXCIsIFxcXCJBcm5Ob3RFcXVhbHNcXFwiLCBcXFwiQXJuTm90TGlrZVxcXCIsIFxcXCJOdWxsXFxcIixcXG59XFxuXFxuX3BmX2ljb19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2ljb19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pY29fc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG4jIFN0cmlwIGFuIG9wdGlvbmFsIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeCwgdGhlbiBJZkV4aXN0cy5cXG5fcGZfaWNvX3VucHJlZml4ZWQob3ApIDo9IHBhcnRzW2NvdW50KHBhcnRzKSAtIDFdIGlmIHBhcnRzIDo9IHNwbGl0KG9wLCBcXFwiOlxcXCIpXFxuXFxuX3BmX2ljb19yb290KG9wKSA6PSBzdWJzdHJpbmcoYiwgMCwgY291bnQoYikgLSA4KSBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0ZW5kc3dpdGgoYiwgXFxcIklmRXhpc3RzXFxcIilcXG59XFxuXFxuX3BmX2ljb19yb290KG9wKSA6PSBiIGlmIHtcXG5cXHRiIDo9IF9wZl9pY29fdW5wcmVmaXhlZChvcClcXG5cXHRub3QgZW5kc3dpdGgoYiwgXFxcIklmRXhpc3RzXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWNvbmRpdGlvbi1vcGVyYXRvclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLkNvbmRpdGlvblxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ29uZGl0aW9uIG9wZXJhdG9yICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN5bnRheCBlcnJvcnMgaW4gcG9saWN5LlxcXFxcXFwiXFxcIiwgW29wXSksXFxuXFx0XFxcIlVzZSBhIGRvY3VtZW50ZWQgb3BlcmF0b3IgKFN0cmluZ0VxdWFscywgQXJuTGlrZSwgLi4uKSwgb3B0aW9uYWxseSB3aXRoIElmRXhpc3RzIG9yIGEgRm9yQWxsVmFsdWVzOi9Gb3JBbnlWYWx1ZTogcHJlZml4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2ljb19kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2ljb19zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdGNvbmQgOj0gb2JqZWN0LmdldChzLCBcXFwiQ29uZGl0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGNvbmQpXFxuXFx0c29tZSBvcCwgXyBpbiBjb25kXFxuXFx0aXNfc3RyaW5nKG9wKVxcblxcdG5vdCBfcGZfaWNvX3Jvb3Qob3ApIGluIF9wZl9pY29fYmFzZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZHVwbGljYXRlLXNpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGF0ZW1lbnQgSURzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGFpcndpc2UgdW5pcXVlbmVzcyB3aXRoaW4gb25lIGRvY3VtZW50OyBzZXBhcmF0ZSBkb2N1bWVudHMgbWF5IHJldXNlXFxuIyBpZHMgZnJlZWx5Llxcbl9wZl9pZHNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZHNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWRzX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5TaWRcXFwiLCBbcGF0aCwgal0pLFxcblxcdHNwcmludGYoXFxcIlNpZCAnJXMnIHJlcGVhdHMgd2l0aGluIG9uZSBwb2xpY3k7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN0YXRlbWVudCBJRHMgKFNJRCkgaW4gYSBzaW5nbGUgcG9saWN5IG11c3QgYmUgdW5pcXVlLlxcXFxcXFwiXFxcIiwgW3NpZF0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHN0YXRlbWVudCBpbiB0aGUgZG9jdW1lbnQgYSBkaXN0aW5jdCBTaWQgKG9yIGRyb3AgdGhlIGR1cGxpY2F0ZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZHNfZG9jc1xcblxcdHN0bXRzIDo9IF9wZl9pZHNfc3RtdHMoZClcXG5cXHRzb21lIFtpLCBhXSBpbiBzdG10c1xcblxcdHNvbWUgW2osIGJdIGluIHN0bXRzXFxuXFx0aSA8IGpcXG5cXHRpc19vYmplY3QoYSlcXG5cXHRpc19vYmplY3QoYilcXG5cXHRzaWQgOj0gb2JqZWN0LmdldChhLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoc2lkKVxcblxcdHNpZCA9PSBvYmplY3QuZ2V0KGIsIFxcXCJTaWRcXFwiLCBcXFwiX19wZl9vdGhlclxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1lZmZlY3QtY2FzZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFZmZlY3QgaXMgY2FzZS1zZW5zaXRpdmUgQWxsb3cgb3IgRGVueVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTG93ZXJjYXNlIGVmZmVjdHMgYXJlIGEgY2xhc3NpYyBoYW5kLXdyaXR0ZW4tSlNPTiB0eXBvIHRoZSBzY2hlbWFcXG4jIGNhbm5vdCBzZWUgKHRoZSBkb2N1bWVudCBpcyBvcGFxdWUganNvbikuXFxuX3BmX2llY19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2llY19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pZWNfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5FZmZlY3RcXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkVmZmVjdCAnJXMnIGlzIG5vdCBBbGxvdyBvciBEZW55IChjYXNlLXNlbnNpdGl2ZSk7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlRoZSBwb2xpY3kgZmFpbGVkIGxlZ2FjeSBwYXJzaW5nXFxcXFxcXCJcXFwiLCBbZWZdKSxcXG5cXHRcXFwiVXNlIEVmZmVjdDogQWxsb3cgb3IgRWZmZWN0OiBEZW55XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWNfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWNfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRlZiA6PSBvYmplY3QuZ2V0KHMsIFxcXCJFZmZlY3RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX3N0cmluZyhlZilcXG5cXHRub3QgZWYgaW4ge1xcXCJBbGxvd1xcXCIsIFxcXCJEZW55XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWV4Y2x1c2l2ZS1maWVsZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9uL05vdEFjdGlvbiBhbmQgUmVzb3VyY2UvTm90UmVzb3VyY2UgYXJlIGV4Y2x1c2l2ZSBwYWlyc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRWFjaCBwYWlyIGlzIGVpdGhlci1vciBwZXIgc3RhdGVtZW50OyBib3RoIGF0IG9uY2UgaXMgYSBzeW50YXggZXJyb3IuXFxuX3BmX2llZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2llZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pZWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWVmX3BhaXJzIDo9IHtbXFxcIkFjdGlvblxcXCIsIFxcXCJOb3RBY3Rpb25cXFwiXSwgW1xcXCJSZXNvdXJjZVxcXCIsIFxcXCJOb3RSZXNvdXJjZVxcXCJdfVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuJXNcXFwiLCBbcGF0aCwgaSwgcGFpclsxXV0pLFxcblxcdHNwcmludGYoXFxcIlN0YXRlbWVudCBzZXRzIGJvdGggJXMgYW5kICVzOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtwYWlyWzBdLCBwYWlyWzFdXSksXFxuXFx0XFxcIktlZXAgb25lIG9mIHRoZSBwYWlyIHBlciBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2llZl9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2llZl9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHNvbWUgcGFpciBpbiBfcGZfaWVmX3BhaXJzXFxuXFx0b2JqZWN0LmdldChzLCBwYWlyWzBdLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzLCBwYWlyWzFdLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1yZXNvdXJjZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVzb3VyY2VzIG11c3QgYmUgQVJOcyBvciAqXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IGxpdGVyYWwgc3RyaW5ncyBhcmUganVkZ2VkIC0gRm46OkdldEF0dCAvIEZuOjpTdWIgdmFsdWVzIHN1cmZhY2VcXG4jIGFzIG1hcmtlciBvYmplY3RzIGluIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKG1lYXN1cmVkKSwgc28gdGhlXFxuIyBpc19zdHJpbmcgZ3VhcmQgbXV0ZXMgdGhlbS5cXG5fcGZfaXJmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaXJmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lyZl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSBbdl0gaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2lyZl92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIlJlc291cmNlICclcycgaXMgbm90IGFuIEFSTjsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUmVzb3VyY2UgJXMgbXVzdCBiZSBpbiBBUk4gZm9ybWF0IG9yICcqJy5cXFxcXFxcIlxcXCIsIFtyLCByXSksXFxuXFx0XFxcIlVzZSBhIGZ1bGwgQVJOIChhcm46Li4uKSBvciAqXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pcmZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pcmZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHIgaW4gX3BmX2lyZl92YWxzKG9iamVjdC5nZXQocywgXFxcIlJlc291cmNlXFxcIiwgW10pKVxcblxcdGlzX3N0cmluZyhyKVxcblxcdHIgIT0gXFxcIipcXFwiXFxuXFx0bm90IHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktc2lkLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQb2xpY3kgc3RhdGVtZW50IFNpZCBtdXN0IGJlIGFscGhhbnVtZXJpY1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJBV1M6OklBTTo6VXNlclxcXCIsIFxcXCJBV1M6OklBTTo6R3JvdXBcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9zaWRmbXRfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuQXNzdW1lUm9sZVBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9zaWRmbXRfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX3NpZGZtdF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1zaWQtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuU2lkXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJTaWQgJyVzJyBpcyBub3QgYWxwaGFudW1lcmljOyBJQU0gcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJTdGF0ZW1lbnQgSURzIChTSUQpIG11c3QgYmUgYWxwaGEtbnVtZXJpY1xcXFxcXFwiXFxcIiwgW3NpZF0pLFxcblxcdFxcXCJVc2Ugb25seSBsZXR0ZXJzIGFuZCBkaWdpdHMgaW4gdGhlIFNpZCAoZHJvcCBoeXBoZW5zLCB1bmRlcnNjb3JlcyBhbmQgc3BhY2VzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX3NpZGZtdF9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX3NpZGZtdF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHNpZCA6PSBvYmplY3QuZ2V0KHMsIFxcXCJTaWRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhzaWQpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeWzAtOUEtWmEtel0qJGAsIHNpZClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXN0YXRlbWVudC1yZXNvdXJjZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJZGVudGl0eSBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIFJlc291cmNlIG9yIE5vdFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHN0YXRlbWVudCBzY29wZWQgdG8gbm90aGluZyBpcyByZWplY3RlZC5cXG5fcGZfaXNycl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lzcnJfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lzcnJfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lzcnJfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktc3RhdGVtZW50LXJlc291cmNlLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWRcXFwiLCBbcGF0aCwgaV0pLFxcblxcdFxcXCJTdGF0ZW1lbnQgaGFzIG5laXRoZXIgUmVzb3VyY2Ugbm9yIE5vdFJlc291cmNlOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJQb2xpY3kgc3RhdGVtZW50IG11c3QgY29udGFpbiByZXNvdXJjZXMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgUmVzb3VyY2UgKGFuIEFSTiBvciAqKSB0byB0aGUgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pc3JyX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXNycl9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlJlc291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgXFxcIk5vdFJlc291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQb2xpY3kgVmVyc2lvbiBtdXN0IGJlIDIwMTItMTAtMTcgb3IgMjAwOC0xMC0xN1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHZlcnNpb24gc3RyaW5nIGlzIGFuIGVudW0gb2YgdHdvIGRhdGVzOyBhbnl0aGluZyBlbHNlIGlzIGEgc3ludGF4XFxuIyBlcnJvciBhdCBjcmVhdGUuXFxuX3BmX2lwdl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lwdl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuVmVyc2lvblxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5IFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2UgVmVyc2lvbjogMjAxMi0xMC0xN1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfdmVyc2lvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pcHZfZG9jc1xcblxcdHYgOj0gb2JqZWN0LmdldChkLCBcXFwiVmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHYgaW4ge1xcXCIyMDEyLTEwLTE3XFxcIiwgXFxcIjIwMDgtMTAtMTdcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS10cnVzdC1wb2xpY3ktbm8tcmVzb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVHJ1c3QgcG9saWNpZXMgY2Fubm90IGNhcnJ5IGEgUmVzb3VyY2UgZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcm9sZSBpdHNlbGYgaXMgdGhlIHJlc291cmNlIG9mIGl0cyB0cnVzdCBwb2xpY3k7IGFuIGV4cGxpY2l0XFxuIyBSZXNvdXJjZSBmaWVsZCBpcyBwcm9oaWJpdGVkLlxcbl9wZl9pdG5yX3RydXN0KG5hbWUpIDo9IGQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGQpXFxufVxcblxcbl9wZl9pdG5yX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pdG5yX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tdHJ1c3QtcG9saWN5LW5vLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pLFxcblxcdFxcXCJUcnVzdCBwb2xpY3kgc3RhdGVtZW50IGhhcyBhIFJlc291cmNlIGZpZWxkOyB0aGUgcm9sZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkhhcyBwcm9oaWJpdGVkIGZpZWxkIFJlc291cmNlXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUmVzb3VyY2UgZnJvbSB0aGUgdHJ1c3QgcG9saWN5IHN0YXRlbWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRkIDo9IF9wZl9pdG5yX3RydXN0KG5hbWUpXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2l0bnJfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tdHJ1c3QtcG9saWN5LXNlcnZpY2UtcHJpbmNpcGFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlcnZpY2UgcHJpbmNpcGFscyBsaXZlIHVuZGVyIGFtYXpvbmF3cy5jb21cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTaGFwZSBjaGVjayBvbmx5OiBldmVyeSBzZXJ2aWNlIHByaW5jaXBhbCBlbmRzIGluIC5hbWF6b25hd3MuY29tIChvclxcbiMgLmFtYXpvbmF3cy5jb20uY24gaW4gdGhlIENoaW5hIHBhcnRpdGlvbikuIFdoZXRoZXIgYSB3ZWxsLXNoYXBlZCBuYW1lXFxuIyBleGlzdHMgaXMgbGVmdCB0byB0aGUgc2VydmljZS5cXG5fcGZfaXRzcF90cnVzdChuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChkKVxcbn1cXG5cXG5fcGZfaXRzcF9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXRzcF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pdHNwX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pdHNwX3ZhbHModikgOj0gdiBpZiBpc19hcnJheSh2KVxcblxcbl9wZl9pdHNwX29rKHNwKSBpZiBlbmRzd2l0aChzcCwgXFxcIi5hbWF6b25hd3MuY29tXFxcIilcXG5cXG5fcGZfaXRzcF9vayhzcCkgaWYgZW5kc3dpdGgoc3AsIFxcXCIuYW1hem9uYXdzLmNvbS5jblxcXCIpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tdHJ1c3QtcG9saWN5LXNlcnZpY2UtcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUHJpbmNpcGFsLlNlcnZpY2VcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIlNlcnZpY2UgcHJpbmNpcGFsICclcycgaXMgbm90IGFuIGFtYXpvbmF3cy5jb20gZG9tYWluOyB0aGUgcm9sZSBjcmVhdGUgZmFpbHMgd2l0aCAnSW52YWxpZCBwcmluY2lwYWwgaW4gcG9saWN5OiBcXFxcXFxcIlNFUlZJQ0VcXFxcXFxcIjpcXFxcXFxcIiVzXFxcXFxcXCInXFxcIiwgW3NwLCBzcF0pLFxcblxcdFxcXCJVc2UgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWUsIGUuZy4gbGFtYmRhLmFtYXpvbmF3cy5jb21cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3ByaW5jaXBhbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdGQgOj0gX3BmX2l0c3BfdHJ1c3QobmFtZSlcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXRzcF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHAgOj0gb2JqZWN0LmdldChzLCBcXFwiUHJpbmNpcGFsXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHApXFxuXFx0c29tZSBzcCBpbiBfcGZfaXRzcF92YWxzKG9iamVjdC5nZXQocCwgXFxcIlNlcnZpY2VcXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKHNwKVxcblxcdG5vdCBfcGZfaXRzcF9vayhzcClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtY29kZS1zMy1wYWlyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlMzLWJhc2VkIENvZGUgbmVlZHMgYm90aCBTM0J1Y2tldCBhbmQgUzNLZXlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgSGFsZiBhbiBTMyByZWZlcmVuY2UgY2Fubm90IGJlIGZldGNoZWQuIE9ubHkganVkZ2VkIHdoZW4gbmVpdGhlciBaaXBGaWxlXFxuIyBub3IgSW1hZ2VVcmkgaXMgcHJlc2VudCAodGhvc2Ugc2hhcGVzIGJlbG9uZyB0byB0aGUgZXhjbHVzaXZlIHJ1bGUpLlxcbl9wZl9sY3NwX2NvZGUobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29kZVxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG5fcGZfbGNzcF9oYXMoYywgaykgaWYgb2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2xjc3BfaGFsZihjKSA6PSBbXFxcIlMzS2V5XFxcIiwgXFxcIlMzQnVja2V0XFxcIl0gaWYge1xcblxcdF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNCdWNrZXRcXFwiKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIlMzS2V5XFxcIilcXG59XFxuXFxuX3BmX2xjc3BfaGFsZihjKSA6PSBbXFxcIlMzQnVja2V0XFxcIiwgXFxcIlMzS2V5XFxcIl0gaWYge1xcblxcdF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNLZXlcXFwiKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIlMzQnVja2V0XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtY29kZS1zMy1wYWlyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvZGUuJXNcXFwiLCBbbWlzc2luZ1swXV0pLFxcblxcdHNwcmludGYoXFxcIkNvZGUgaGFzICVzIGJ1dCBubyAlczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUzMgQnVja2V0IGFuZCBLZXkgYXJlIHJlcXVpcmVkIGZvciB1cGxvYWRpbmcgd2l0aCBTMyBwYXJhbWV0ZXJzLlxcXFxcXFwiXFxcIiwgW21pc3NpbmdbMV0sIG1pc3NpbmdbMF1dKSxcXG5cXHRcXFwiU2V0IGJvdGggUzNCdWNrZXQgYW5kIFMzS2V5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRjIDo9IF9wZl9sY3NwX2NvZGUobmFtZSlcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJaaXBGaWxlXFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJJbWFnZVVyaVxcXCIpXFxuXFx0bWlzc2luZyA6PSBfcGZfbGNzcF9oYWxmKGMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWNvZGUtemlwZmlsZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5saW5lIFppcEZpbGUgZXhjbHVkZXMgZXZlcnkgb3RoZXIgQ29kZSBwYXJhbWV0ZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgS2V5IHByZXNlbmNlIGluIHRoZSBDb2RlIG9iamVjdCBpcyB0aGUgdmlvbGF0aW9uOyBjaGVja2VkIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sY3p4X290aGVyIDo9IHtcXFwiUzNCdWNrZXRcXFwiLCBcXFwiUzNLZXlcXFwiLCBcXFwiUzNPYmplY3RWZXJzaW9uXFxcIiwgXFxcIkltYWdlVXJpXFxcIn1cXG5cXG5fcGZfbGN6eF9jb2RlKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvZGVcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtY29kZS16aXBmaWxlLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db2RlLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb2RlIHNldHMgWmlwRmlsZSB0b2dldGhlciB3aXRoICVzOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQbGVhc2UgZG8gbm90IHByb3ZpZGUgb3RoZXIgRnVuY3Rpb25Db2RlIHBhcmFtZXRlcnMgd2hlbiBwcm92aWRpbmcgYSBaaXBGaWxlLlxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaW5saW5lIFppcEZpbGUgYWxvbmUsIG9yIHN3aXRjaCBlbnRpcmVseSB0byB0aGUgUzMvaW1hZ2UgcmVmZXJlbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRjIDo9IF9wZl9sY3p4X2NvZGUobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJaaXBGaWxlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHNvbWUgayBpbiBfcGZfbGN6eF9vdGhlclxcblxcdG9iamVjdC5nZXQoYywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1kbHEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkIGxldHRlciB0YXJnZXQgbXVzdCBzaXQgaW4gdGhlIGRlcGxveSByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVnaW9uIGNvbXBhcmlzb24gbmVlZHMgdGhlIGRlcGxveSByZWdpb24sIHdoaWNoIG9ubHkgdGhpcyBwYWNrIHNlZXNcXG4jIChkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIGluIGVuZm9yY2UgbW9kZTsgdGhlIHJ1bGVcXG4jIHNraXBzIHdpdGhvdXQgaXQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWRscS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZWFkIGxldHRlciB0YXJnZXQgcmVnaW9uICclcycgaXMgbm90IHRoZSBkZXBsb3kgcmVnaW9uICclcyc7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgZGVhZCBsZXR0ZXIgcXVldWUgQVJOOiBUaGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5IHRoZSBUYXJnZXRBcm4gbXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIExhbWJkYSBmdW5jdGlvbiBpdCdzIGFzc29jaWF0ZWQgd2l0aC5cXFxcXFxcIlxcXCIsIFtwYXJ0c1szXSwgcmVnaW9uXSksXFxuXFx0XFxcIlBvaW50IERlYWRMZXR0ZXJDb25maWcgYXQgYSBxdWV1ZSBvciB0b3BpYyBpbiB0aGUgc2FtZSByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1kZWFkbGV0dGVyY29uZmlnLmh0bWxcXFwiKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1szXSAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZGxxLXNlcnZpY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGRlYWQgbGV0dGVyIHRhcmdldCBtdXN0IGJlIGFuIFNRUyBxdWV1ZSBvciBTTlMgdG9waWNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2Ugc2VnbWVudCBsaXZlcyBpbnNpZGUgdGhlIEFSTiBzdHJpbmcsIGludmlzaWJsZSB0byBhbnlcXG4jIHNjaGVtYSBsYXllci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1kbHEtc2VydmljZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVhZExldHRlckNvbmZpZy5UYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIkRlYWQgbGV0dGVyIHRhcmdldCBzZXJ2aWNlICclcycgaXMgbm90IHNxcyBvciBzbnM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgZGVhZCBsZXR0ZXIgcXVldWUgQVJOOiBUaGUgc2VydmljZSBzcGVjaWZpZWQgYnkgdGhlIFRhcmdldEFybiBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZWFkIGxldHRlciBjb25maWd1cmF0aW9uLlxcXFxcXFwiXFxcIiwgW3BhcnRzWzJdXSksXFxuXFx0XFxcIlBvaW50IERlYWRMZXR0ZXJDb25maWcgYXQgYW4gU1FTIHF1ZXVlIG9yIFNOUyB0b3BpYyBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1kZWFkbGV0dGVyY29uZmlnLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRub3QgcGFydHNbMl0gaW4ge1xcXCJzcXNcXFwiLCBcXFwic25zXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZWZzLXJlcXVpcmVzLXZwY1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNb3VudGluZyBFRlMgcmVxdWlyZXMgVnBjQ29uZmlnXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1vdW50aW5nIEVGUyByZXF1aXJlcyB0aGUgZnVuY3Rpb24gdG8gcnVuIGluc2lkZSBhIFZQQy4gS2V5IHByZXNlbmNlIGlzXFxuIyBjaGVja2VkIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xlZnN2X3Byb3BzKG5hbWUpIDo9IHByb3BzIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZWZzLXJlcXVpcmVzLXZwY1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVnBjQ29uZmlnXFxcIixcXG5cXHRcXFwiRmlsZVN5c3RlbUNvbmZpZ3Mgd2l0aG91dCBWcGNDb25maWc7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkZ1bmN0aW9uIG11c3QgYmUgY29uZmlndXJlZCB0byBleGVjdXRlIGluIGEgVlBDIHRvIHJlZmVyZW5jZSBhY2Nlc3MgcG9pbnQgLi4uIFBsZWFzZSB1cGRhdGUgdGhlIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFZwY0NvbmZpZyB3aXRoIHN1Ym5ldHMgdGhhdCBoYXZlIEVGUyBtb3VudCB0YXJnZXRzIGluIHRoZWlyIEFac1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRwcm9wcyA6PSBfcGZfbGVmc3ZfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlsZVN5c3RlbUNvbmZpZ3NcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0NvbmZpZ1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZW52LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbGltaXRlZCB0byA0MDk2IGJ5dGVzIGluIHRvdGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODquODhuODqeODq+aWh+Wtl+WIl+OBruOCreODvC/lgKTjgaDjgZHjgpLmlbDjgYjjgovvvIjjg4jjg7zjgq/jg7Pjga/jgrnjgq3jg4Pjg5fvvInjgILlkIjoqIjjgYzml6LjgasgNDA5NiDjgpLotoXjgYjjgaZcXG4jIOOBhOOCjOOBsOOAgeWun+mam+OBruODh+ODl+ODreOCpOOBp+OCguW/heOBmuWkseaVl+OBmeOCi++8iOWun+OCteOCpOOCuuOBr+aOqOWumuS7peS4iuOBq+OBl+OBi+OBquOCieOBquOBhO+8ieOAglxcbiMgTk9URTog44GT44Gu44Ko44Oz44K444Oz44GuIFJlZ28g44OR44O844K144Gv5YaF5YyF6KGo6KiY5YaF44GuIDIg5aSJ5pWwIHNvbWXvvIhzb21lIGssIHYgaW4gdmFyc++8ieOCklxcbiMg5Y+X44GR5LuY44GR44Gq44GE44Gf44KB44CBb2JqZWN0LmtleXMg57WM55Sx44Gn5pu444GP44CCXFxuX3BmX2xlbnZfc2l6ZSh2YXJzKSA6PSBzdW0oW3MgfFxcblxcdHNvbWUgayBpbiBvYmplY3Qua2V5cyh2YXJzKVxcblxcdGlzX3N0cmluZyh2YXJzW2tdKVxcblxcdHMgOj0gY291bnQoaykgKyBjb3VudCh2YXJzW2tdKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZW52LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvdGFsIGF0IGxlYXN0ICVkIGJ5dGVzIChsaXRlcmFsIGtleXMgYW5kIHZhbHVlcyksIGJ1dCBMYW1iZGEgbGltaXRzIHRoZSBlbnZpcm9ubWVudCB0byA0MDk2IGJ5dGVzOyBDcmVhdGVGdW5jdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFt0b3RhbF0pLFxcblxcdFxcXCJNb3ZlIGxhcmdlIHZhbHVlcyB0byBTU00gUGFyYW1ldGVyIFN0b3JlLCBTZWNyZXRzIE1hbmFnZXIsIG9yIGEgYnVuZGxlZCBjb25maWcgZmlsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2dldHRpbmdzdGFydGVkLWxpbWl0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR2YXJzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzXFxcIilcXG5cXHRpc19vYmplY3QodmFycylcXG5cXHR0b3RhbCA6PSBfcGZfbGVudl9zaXplKHZhcnMpXFxuXFx0dG90YWwgPiA0MDk2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVzbS1iYXRjaHNpemUtd2luZG93XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNRUyBiYXRjaCBzaXplcyBvdmVyIDEwIG5lZWQgYSBiYXRjaGluZyB3aW5kb3dcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNRUy1vbmx5IGNvdXBsaW5nOiBiaWcgYmF0Y2hlcyBtdXN0IHdhaXQgZm9yIGEgd2luZG93LiBLaW5lc2lzIGFuZFxcbiMgRHluYW1vREIgc291cmNlcyB0YWtlIGxhcmdlIGJhdGNoZXMgd2l0aG91dCBvbmUsIGhlbmNlIHRoZSBTUVMgZ3VhcmQuXFxuX3BmX2xic3dfaXNfc3FzKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIikgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxufVxcblxcbl9wZl9sYnN3X2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRzcGxpdChhcm4sIFxcXCI6XFxcIilbMl0gPT0gXFxcInNxc1xcXCJcXG59XFxuXFxuX3BmX2xic3dfbm9fd2luZG93KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfbGJzd19ub193aW5kb3cobmFtZSkgaWYge1xcblxcdHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIpKSA9PSAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1iYXRjaHNpemUtd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYXRjaFNpemVcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhdGNoU2l6ZSAldiB3aXRob3V0IGEgYmF0Y2hpbmcgd2luZG93OyB0aGUgbWFwcGluZyBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogTWF4aW11bSBiYXRjaCB3aW5kb3cgaW4gc2Vjb25kcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGlmIG1heGltdW0gYmF0Y2ggc2l6ZSBpcyBncmVhdGVyIHRoYW4gMTBcXFxcXFxcIlxcXCIsIFtiXSksXFxuXFx0XFxcIlNldCBNYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHMgKDEtMzAwKSwgb3Iga2VlcCBCYXRjaFNpemUgYXQgMTAgb3IgbGVzc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1ldmVudHNvdXJjZW1hcHBpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcXFwiKVxcblxcdF9wZl9sYnN3X2lzX3NxcyhuYW1lKVxcblxcdGIgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmF0Y2hTaXplXFxcIikpXFxuXFx0YiA+IDEwXFxuXFx0X3BmX2xic3dfbm9fd2luZG93KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVzbS1maWZvLWJhdGNoaW5nLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGSUZPIHF1ZXVlcyByZWplY3QgYSBiYXRjaGluZyB3aW5kb3dcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEZJRk8gb3JkZXJpbmcgZm9yYmlkcyBob2xkaW5nIGEgYmF0Y2ggb3Blbi4gRklGTy1uZXNzIGNvbWVzIGZyb20gdGhlXFxuIyBxdWV1ZSBzaWJsaW5nJ3MgRmlmb1F1ZXVlIGZsYWcgb3IgdGhlIC5maWZvIGFybiBzdWZmaXguXFxuX3BmX2xmYndfaXNfZmlmbyhuYW1lKSBpZiB7XFxuXFx0cSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRxIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikpID09IHRydWVcXG59XFxuXFxuX3BmX2xmYndfaXNfZmlmbyhuYW1lKSBpZiB7XFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aChhcm4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1maWZvLWJhdGNoaW5nLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIixcXG5cXHRcXFwiQmF0Y2hpbmcgd2luZG93IG9uIGEgRklGTyBxdWV1ZSBzb3VyY2U7IHRoZSBtYXBwaW5nIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBCYXRjaGluZyB3aW5kb3cgaXMgbm90IHN1cHBvcnRlZCBmb3IgRklGTyBxdWV1ZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzLCBvciB1c2UgYSBzdGFuZGFyZCBxdWV1ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1ldmVudHNvdXJjZW1hcHBpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcXFwiKVxcblxcdF9wZl9sZmJ3X2lzX2ZpZm8obmFtZSlcXG5cXHR0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiKSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVzbS1zcXMtc3RhcnRpbmctcG9zaXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU1FTIGV2ZW50IHNvdXJjZXMgcmVqZWN0IFN0YXJ0aW5nUG9zaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFN0YXJ0aW5nUG9zaXRpb24gYmVsb25ncyB0byBzdHJlYW0gc291cmNlczsgcXVldWVzIGhhdmUgbm8gb2Zmc2V0cy5cXG4jIERldGVjdGVkIHZpYSBhbiBpbi10ZW1wbGF0ZSBxdWV1ZSBzaWJsaW5nIG9yIHRoZSBzcXMgYXJuIHNlZ21lbnQuXFxuX3BmX2xlc3BfaXNfc3FzKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIikgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxufVxcblxcbl9wZl9sZXNwX2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRzcGxpdChhcm4sIFxcXCI6XFxcIilbMl0gPT0gXFxcInNxc1xcXCJcXG59XFxuXFxuX3BmX2xlc3Bfc2V0KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiU3RhcnRpbmdQb3NpdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZXNtLXNxcy1zdGFydGluZy1wb3NpdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3RhcnRpbmdQb3NpdGlvblxcXCIsXFxuXFx0XFxcIlN0YXJ0aW5nUG9zaXRpb24gb24gYW4gU1FTIGV2ZW50IHNvdXJjZTsgdGhlIG1hcHBpbmcgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IFN0YXJ0aW5nUG9zaXRpb24gaXMgbm90IHZhbGlkIGZvciBTUVMgZXZlbnQgc291cmNlcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgU3RhcnRpbmdQb3NpdGlvbiAoaXQgb25seSBhcHBsaWVzIHRvIEtpbmVzaXMvRHluYW1vREIvS2Fma2Egc291cmNlcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGVzcF9pc19zcXMobmFtZSlcXG5cXHRfcGZfbGVzcF9zZXQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtbWVtb3J5LW1heFwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlTaXplIHRvcHMgb3V0IGF0IDEwMjQwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIGhhcyB0aGUgMTI4IGZsb29yIGJ1dCBpcyBtaXNzaW5nIHRoZSAxMDI0MCBjYXBcXG4jIChlbmdpbmUgY2xlYW4gb24gMjAwMDAsIEYzMDM0IG9uIDY0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1tZW1vcnktbWF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZW1vcnlTaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNZW1vcnlTaXplICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiJ01lbW9yeVNpemUnIHZhbHVlIGZhaWxlZCB0byBzYXRpc2Z5IGNvbnN0cmFpbnQ6IE1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMjQwXFxcXFxcXCJcXFwiLCBbbV0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAxMDI0MCBNQlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVNpemVcXFwiKSlcXG5cXHRtID4gMTAyNDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtdGltZW91dC1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGltZW91dCB0b3BzIG91dCBhdCA5MDAgc2Vjb25kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBoYXMgdGhlIDEgZmxvb3IgYnV0IGlzIG1pc3NpbmcgdGhlIDkwMCBjYXAgKGVuZ2luZVxcbiMgY2xlYW4gb24gOTAxLCBGMzAzNCBvbiAwKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS10aW1lb3V0LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGltZW91dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGltZW91dCAldiBpcyBvdmVyIHRoZSAxNS1taW51dGUgY2FwOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJWYWx1ZSAnJXYnIGF0ICd0aW1lb3V0JyBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA5MDBcXFxcXFxcIlxcXCIsIFt0LCB0XSksXFxuXFx0XFxcIlVzZSBhdCBtb3N0IDkwMCBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWZ1bmN0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGltZW91dFxcXCIpKVxcblxcdHQgPiA5MDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sb2dzLWZpbHRlci1wYXR0ZXJuLWJyYWNrZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJsb2dzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZmlsdGVyIHBhdHRlcm4gc3RhcnRpbmcgd2l0aCAnWycgbXVzdCBlbmQgd2l0aCAnXSdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnZnBiX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvRmlsdGVyQW5kUGF0dGVyblN5bnRheC5odG1sXFxcIlxcblxcbl9wZl9sZ2ZwYl9tc2coa2luZCkgOj0gc3ByaW50ZihcXFwiVGhlICVzIGZpbHRlciBwYXR0ZXJuIHN0YXJ0cyB3aXRoICdbJyBidXQgZG9lcyBub3QgZW5kIHdpdGggJ10nOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJZiBhIGZpbHRlciBwYXR0ZXJuIHN0YXJ0cyB3aXRoICdbJyBpdCBtdXN0IGVuZCB3aXRoICddJ1xcXFxcXFwiXFxcIiwgW2tpbmRdKVxcblxcbl9wZl9sZ2ZwYl9maXggOj0gXFxcIkNsb3NlIHRoZSBicmFja2V0IOKAlCBhIHNwYWNlLWRlbGltaXRlZCBwYXR0ZXJuIGlzIFtmaWVsZDEsIGZpZWxkMiwgLi4uXVxcXCJcXG5cXG4jIFRoZSBzYW1lIHBhcnNlciBydW5zIGZvciBtZXRyaWMgZmlsdGVycyBhbmQgc3Vic2NyaXB0aW9uIGZpbHRlcnMsIGFuZCBpdFxcbiMgcnVucyBiZWZvcmUgYW55IGRlc3RpbmF0aW9uIHZhbGlkYXRpb24gKGJlbmNoIGMwMS9jMDYpLiBPbmx5IHRoaXNcXG4jIHN0YXJ0L2VuZCBwYWlyaW5nIGlzIGNoZWNrZWQgaGVyZTsgYSBmdWxsIHBhdHRlcm4gcGFyc2VyIGlzIG91dCBvZiBzY29wZS5cXG5fcGZfbGdmcGJfdW5iYWxhbmNlZChwKSBpZiB7XFxuXFx0dCA6PSB0cmltX3NwYWNlKHApXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiW1xcXCIpXFxuXFx0bm90IGVuZHN3aXRoKHQsIFxcXCJdXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLWZpbHRlci1wYXR0ZXJuLWJyYWNrZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiLFxcblxcdF9wZl9sZ2ZwYl9tc2coXFxcIm1ldHJpY1xcXCIpLFxcblxcdF9wZl9sZ2ZwYl9maXgsIF9wZl9sZ2ZwYl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXFxcIilcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0X3BmX2xnZnBiX3VuYmFsYW5jZWQocClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLWZpbHRlci1wYXR0ZXJuLWJyYWNrZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiLFxcblxcdF9wZl9sZ2ZwYl9tc2coXFxcInN1YnNjcmlwdGlvblxcXCIpLFxcblxcdF9wZl9sZ2ZwYl9maXgsIF9wZl9sZ2ZwYl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXFxcIilcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0X3BmX2xnZnBiX3VuYmFsYW5jZWQocClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sb2dzLW1ldHJpYy1kaW1lbnNpb25zLWRlZmF1bHQtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEaW1lbnNpb25zIGFuZCBEZWZhdWx0VmFsdWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIERlZmF1bHRWYWx1ZSBpcyBlbWl0dGVkIHdoZW4gYSBsb2cgbGluZSBkb2VzIG5vdCBtYXRjaCwgYnV0IGEgZGltZW5zaW9uXFxuIyB2YWx1ZSBjYW4gb25seSBjb21lIGZyb20gYSBtYXRjaCDigJQgdGhlIHNlcnZpY2UgcmVqZWN0cyB0aGUgY29tYmluYXRpb24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLW1ldHJpYy1kaW1lbnNpb25zLWRlZmF1bHQtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLk1ldHJpY1RyYW5zZm9ybWF0aW9ucy4lZC5EZWZhdWx0VmFsdWVcXFwiLCBbdC5pbmRleF0pLFxcblxcdFxcXCJUaGUgbWV0cmljIHRyYW5zZm9ybWF0aW9uIHNldHMgYm90aCBEaW1lbnNpb25zIGFuZCBEZWZhdWx0VmFsdWU7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkludmFsaWQgbWV0cmljIHRyYW5zZm9ybWF0aW9uOiBkaW1lbnNpb25zIGFuZCBkZWZhdWx0IHZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgcHJvcGVydGllc1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiRHJvcCBEZWZhdWx0VmFsdWUgd2hlbiB0aGUgdHJhbnNmb3JtYXRpb24gaGFzIERpbWVuc2lvbnMsIG9yIGRyb3AgdGhlIERpbWVuc2lvbnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxvZ3MtbWV0cmljZmlsdGVyLW1ldHJpY3RyYW5zZm9ybWF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIkRlZmF1bHRWYWx1ZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRkaW1zIDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIkRpbWVuc2lvbnNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGRpbXMpXFxuXFx0Y291bnQoZGltcykgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1zdWJzY3JpcHRpb24ta2luZXNpcy1yb2xlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgZGVzdGluYXRpb24gbmVlZHMgUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfbGdza3JfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9TdWJzY3JpcHRpb25GaWx0ZXJzLmh0bWxcXFwiXFxuXFxuIyBUaGUgZGVzdGluYXRpb24gaXMgcHJvdmFibHkgS2luZXNpcyB0d28gd2F5czogYSBsaXRlcmFsXFxuIyBhcm46PHBhcnRpdGlvbj46a2luZXNpczogc3RyaW5nLCBvciBhIFJlZi9HZXRBdHQgdGhhdCByZXNvbHZlKCkgdHVybnMgaW50b1xcbiMgdGhlIGxvZ2ljYWwgSUQgb2YgYW4gaW4tdGVtcGxhdGUgQVdTOjpLaW5lc2lzOjpTdHJlYW0uIFNjb3BlZCB0byBLaW5lc2lzIOKAlFxcbiMgdGhlIGJlbmNoIGVycm9yIG5hbWVzIFxcXCJ2ZW5kb3Iga2luZXNpc1xcXCI7IG90aGVyIHZlbmRvcnMgd2VyZSBub3QgbWVhc3VyZWQuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRwYXJ0cyA6PSBzcGxpdChkLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDNcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJraW5lc2lzXFxcIlxcbn1cXG5cXG5fcGZfbGdza3Jfa2luZXNpc19kZXN0KG5hbWUpIGlmIHtcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzdGluYXRpb25Bcm5cXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdGQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpczo6U3RyZWFtXFxcIilcXG59XFxuXFxuIyBUcnVlIGFic2VuY2Ugb2YgUm9sZUFybiBuZWVkcyB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfbGdza3Jfcm9sZV9hYnNlbnQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJSb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm9sZUFyblxcXCIsXFxuXFx0XFxcIlRoZSBzdWJzY3JpcHRpb24gZmlsdGVyIHRhcmdldHMgYSBLaW5lc2lzIHN0cmVhbSBidXQgc2V0cyBubyBSb2xlQXJuOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJkZXN0aW5hdGlvbkFybiBmb3IgdmVuZG9yIGtpbmVzaXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCByb2xlQXJuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBSb2xlQXJuIGZvciBhIHJvbGUgdGhhdCBsb2dzLmFtYXpvbmF3cy5jb20gY2FuIGFzc3VtZSB3aXRoIGtpbmVzaXM6UHV0UmVjb3JkIG9uIHRoZSBzdHJlYW1cXFwiLFxcblxcdF9wZl9sZ3Nrcl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXFxcIilcXG5cXHRfcGZfbGdza3Jfa2luZXNpc19kZXN0KG5hbWUpXFxuXFx0X3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t0cmFja1wiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCYWNrdHJhY2sgb25seSB3b3JrcyBvbiBhdXJvcmEtbXlzcWwsIHdpdGggYSB3aW5kb3cgb2YgYXQgbW9zdCAyNTkyMDAgc2Vjb25kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9BdXJvcmFNeVNRTC5NYW5hZ2luZy5CYWNrdHJhY2suaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdHJhY2tcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQmFja3RyYWNrIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGF1cm9yYS1teXNxbCAoXFxcXFxcXCJCYWNrdHJhY2sgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSAlcyBlbmdpbmUuXFxcXFxcXCIpXFxcIiwgW2VuZ10pLFxcblxcdFxcXCJSZW1vdmUgQmFja3RyYWNrV2luZG93LCBvciB1c2UgdGhlIGF1cm9yYS1teXNxbCBlbmdpbmVcXFwiLFxcblxcdF9wZl9yZHNidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmFja3RyYWNrV2luZG93XFxcIikpXFxuXFx0biA+IDBcXG5cXHRlbmcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKVxcblxcdGlzX3N0cmluZyhlbmcpXFxuXFx0ZW5nICE9IFxcXCJhdXJvcmEtbXlzcWxcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t0cmFja1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmFja3RyYWNrV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdHJhY2tXaW5kb3cgJXYgaXMgb3V0c2lkZSAwLTI1OTIwMCBzZWNvbmRzICg3MiBob3VycylcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAyNTkyMDAgc2Vjb25kc1xcXCIsXFxuXFx0X3BmX3Jkc2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCQ2x1c3RlclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwiYXVyb3JhLW15c3FsXFxcIlxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmFja3RyYWNrV2luZG93XFxcIikpXFxuXFx0biA+IDI1OTIwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdXAtcmV0ZW50aW9uLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJhY2t1cFJldGVudGlvblBlcmlvZCBtdXN0IGJlIGF0IG1vc3QgMzUgZGF5c1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtcmV0ZW50aW9uLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYWNrdXBSZXRlbnRpb25QZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t1cFJldGVudGlvblBlcmlvZCAldiBleGNlZWRzIHRoZSBtYXhpbXVtOyBSRFMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiUmV0ZW50aW9uIHBlcmlvZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzUuXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYSByZXRlbnRpb24gcGVyaW9kIG9mIDM1IGRheXMgb3IgbGVzc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmFja3VwUmV0ZW50aW9uUGVyaW9kXFxcIikpXFxuXFx0biA+IDM1XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZHVyYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGJhY2t1cCB3aW5kb3cgbXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgXFxcIkhIOk1NXFxcIiAtPiBtaW51dGVzIG9mIGRheTsgdW5kZWZpbmVkIGZvciBhbnl0aGluZyBlbHNlLiBEaWdpdHMgZ29cXG4jIHRocm91Z2ggYSBsb29rdXAgdGFibGUgYmVjYXVzZSB0b19udW1iZXIgcmVqZWN0cyBsZWFkaW5nIHplcm9zXFxuIyAodG9fbnVtYmVyKFxcXCIwM1xcXCIpIGlzIHVuZGVmaW5lZCBpbiB0aGUgZW5naW5lJ3MgUmVnbyBidWlsZCkuXFxuX3BmX3Jkc3dkX2RpZ2l0IDo9IHtcXFwiMFxcXCI6IDAsIFxcXCIxXFxcIjogMSwgXFxcIjJcXFwiOiAyLCBcXFwiM1xcXCI6IDMsIFxcXCI0XFxcIjogNCwgXFxcIjVcXFwiOiA1LCBcXFwiNlxcXCI6IDYsIFxcXCI3XFxcIjogNywgXFxcIjhcXFwiOiA4LCBcXFwiOVxcXCI6IDl9XFxuXFxuX3BmX3Jkc3dkX21pbih0KSA6PSBtIGlmIHtcXG5cXHRpc19zdHJpbmcodClcXG5cXHRyZWdleC5tYXRjaChgXihbMDFdWzAtOV18MlswLTNdKTpbMC01XVswLTldJGAsIHQpXFxuXFx0aCA6PSAoX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAwLCAxKV0gKiAxMCkgKyBfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDEsIDEpXVxcblxcdG1pIDo9IChfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDMsIDEpXSAqIDEwKSArIF9wZl9yZHN3ZF9kaWdpdFtzdWJzdHJpbmcodCwgNCwgMSldXFxuXFx0bSA6PSAoaCAqIDYwKSArIG1pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZHVyYXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiUHJlZmVycmVkQmFja3VwV2luZG93ICclcycgaXMgb25seSAldiBtaW51dGVzOyBSRFMgcmVxdWlyZXMgYXQgbGVhc3QgMzAgKFxcXFxcXFwiQmFja3VwIHdpbmRvdyBtdXN0IGJlIGF0IGxlYXN0IDMwIG1pbnV0ZXMuXFxcXFxcXCIpXFxcIiwgW3csIGRdKSxcXG5cXHRcXFwiV2lkZW4gdGhlIHdpbmRvdyB0byAzMCBtaW51dGVzIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcodylcXG5cXHRwYXJ0cyA6PSBzcGxpdCh3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG5cXHRzIDo9IF9wZl9yZHN3ZF9taW4ocGFydHNbMF0pXFxuXFx0ZSA6PSBfcGZfcmRzd2RfbWluKHBhcnRzWzFdKVxcblxcdGQgOj0gKChlIC0gcykgKyAxNDQwKSAlIDE0NDBcXG5cXHRkIDwgMzBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtYmFja3VwLXdpbmRvdy1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUHJlZmVycmVkQmFja3VwV2luZG93IG11c3QgYmUgaGgyNDptaS1oaDI0Om1pXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyAnJXMnIGlzIG5vdCBoaDI0Om1pLWhoMjQ6bWkgKDI0SCBjbG9jayBVVEMpOyBSRFMgcmVqZWN0cyBpdCBhdCBjcmVhdGUgdGltZVxcXCIsIFt3XSksXFxuXFx0XFxcIlVzZSB0aGUgaGgyNDptaS1oaDI0Om1pIGZvcm0sIGUuZy4gMDM6MDAtMDQ6MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcodylcXG5cXHRub3QgcmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XS0oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB3KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1kYm5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIERCTmFtZSBtdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBsZXR0ZXItc3RhcnQgaGFsZiBvZiB0aGUgc2VydmljZSBtZXNzYWdlIGlzIGNsYWltZWQ6IHRoZVxcbiMgXFxcIm9ubHkgYWxwaGFudW1lcmljXFxcIiBoYWxmIGlzIG1lYXN1cmFibHkgd3JvbmcgKGJlbmNoX2RiIGRlcGxveXMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWRibmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRCTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiREJOYW1lICclcycgZG9lcyBub3QgYmVnaW4gd2l0aCBhIGxldHRlciAoXFxcXFxcXCJEQk5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyXFxcXFxcXCIpOyB0aGUgQ3JlYXRlREJJbnN0YW5jZSBjYWxsIGZhaWxzXFxcIiwgW2RuXSksXFxuXFx0XFxcIlN0YXJ0IHRoZSBkYXRhYmFzZSBuYW1lIHdpdGggYSBsZXR0ZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuZ2luZVxcXCIpID09IFxcXCJwb3N0Z3Jlc1xcXCJcXG5cXHRkbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRCTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdYCwgZG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWRlc2NyaXB0aW9uLXByaW50YWJsZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSRFMgZ3JvdXAgZGVzY3JpcHRpb25zIG11c3QgYmUgcHJpbnRhYmxlIEFTQ0lJXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJTdWJuZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJEUzo6REJQYXJhbWV0ZXJHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNkZXNjX2JhZCBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EQlN1Ym5ldEdyb3VwRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXltcXFxceDIwLVxcXFx4N2VdKiRgLCB2KVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cERlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG5fcGZfcmRzZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXltcXFxceDIwLVxcXFx4N2VdKiRgLCB2KVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWRlc2NyaXB0aW9uLXByaW50YWJsZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZXNjcmlwdGlvbiAnJXMnIGlzIHJlamVjdGVkOiBSRFMgdHJlYXRzIGFueSBub24tQVNDSUkgY2hhcmFjdGVyIGFzIGEgbm9uLXByaW50YWJsZSBjb250cm9sIGNoYXJhY3RlclxcXCIsIFt2XSksXFxuXFx0XFxcIldyaXRlIHRoZSBkZXNjcmlwdGlvbiBpbiBwcmludGFibGUgQVNDSUlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCU3VibmV0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCB2XSBpbiBfcGZfcmRzZGVzY19iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtZ3AzLWlvcHMtc3RvcmFnZS10aHJlc2hvbGRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiZ3AzIGJlbG93IDQwMCBHaUIgY2Fubm90IHRha2UgY3VzdG9tIElvcHMgb3IgU3RvcmFnZVRocm91Z2hwdXQgKHBvc3RncmVzL215c3FsKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzZ3AzX2hhcyhuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Jkc2dwM19jdXN0b20obmFtZSkgaWYgX3BmX3Jkc2dwM19oYXMobmFtZSwgXFxcIklvcHNcXFwiKVxcblxcbl9wZl9yZHNncDNfY3VzdG9tKG5hbWUpIGlmIF9wZl9yZHNncDNfaGFzKG5hbWUsIFxcXCJTdG9yYWdlVGhyb3VnaHB1dFxcXCIpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtZ3AzLWlvcHMtc3RvcmFnZS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcImdwMyB3aXRoICV2IEdpQiBjYW5ub3QgdGFrZSBjdXN0b20gSW9wcy9TdG9yYWdlVGhyb3VnaHB1dCBiZWxvdyA0MDAgR2lCIGZvciBlbmdpbmUgJXMgKFxcXFxcXFwiWW91IGNhbid0IHNwZWNpZnkgSU9QUyBvciBzdG9yYWdlIHRocm91Z2hwdXQgLi4uIGxlc3MgdGhhbiA0MDAuXFxcXFxcXCIpXFxcIiwgW3MsIGVuZ10pLFxcblxcdFxcXCJEcm9wIHRoZSBjdXN0b20gSW9wcy9TdG9yYWdlVGhyb3VnaHB1dCwgb3IgYWxsb2NhdGUgYXQgbGVhc3QgNDAwIEdpQlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1N0b3JhZ2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRlbmcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKVxcblxcdGVuZyBpbiB7XFxcInBvc3RncmVzXFxcIiwgXFxcIm15c3FsXFxcIn1cXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG9jYXRlZFN0b3JhZ2VcXFwiKSlcXG5cXHRzIDwgNDAwXFxuXFx0X3BmX3Jkc2dwM19jdXN0b20obmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtaW8xLWlvcHMtcmF0aW9cIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwicG9zdGdyZXMgaW8xIElvcHMgbWF5IG5vdCBleGNlZWQgNTAgcGVyIEdpQiBvZiBzdG9yYWdlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgYmVuY2hlZCBlbmdpbmUvdHlwZSBwYWlyOyB0aGUgaGlzdG9yaWNhbCA2NDAwMCBJT1BTIGNhcCBpc1xcbiMgZ29uZSAoODAwMDAgZGVwbG95ZWQgY2xlYW4gYXQgcmF0aW8gNDAgb24gMjAyNi0wOS0wMykuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtaW8xLWlvcHMtcmF0aW9cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgaXMgJXYgcGVyIEdpQiBmb3IgJXYgR2lCOyBwb3N0Z3JlcyBpbzEgYWxsb3dzIGF0IG1vc3QgNTAgKFxcXFxcXFwiSW52YWxpZCBpb3BzIHRvIHN0b3JhZ2UgKEdpQikgcmF0aW9cXFxcXFxcIilcXFwiLCBbbiwgbiAvIHMsIHNdKSxcXG5cXHRcXFwiS2VlcCBJb3BzIGF0IG9yIGJlbG93IDUwIHggQWxsb2NhdGVkU3RvcmFnZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1N0b3JhZ2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuZ2luZVxcXCIpID09IFxcXCJwb3N0Z3Jlc1xcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIikgPT0gXFxcImlvMVxcXCJcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG9jYXRlZFN0b3JhZ2VcXFwiKSlcXG5cXHRzID4gMFxcblxcdG4gPiBzICogNTBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtaW9wcy1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJpbzEgYW5kIGlvMiBzdG9yYWdlIHJlcXVpcmUgdGhlIElvcHMgcHJvcGVydHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtaW9wcy1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiU3RvcmFnZVR5cGUgJXMgcmVxdWlyZXMgSW9wcyAoXFxcXFxcXCJUaGUgc3RvcmFnZSB0eXBlICVzIHJlcXVpcmVzIGlvcHMgdG8gYmUgc3BlY2lmaWVkLlxcXFxcXFwiKVxcXCIsIFtzdCwgc3RdKSxcXG5cXHRcXFwiU2V0IElvcHMgYWxvbmdzaWRlIHRoZSBwcm92aXNpb25lZC1JT1BTIHN0b3JhZ2UgdHlwZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcXFwiKVxcblxcdHN0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3RvcmFnZVR5cGVcXFwiKVxcblxcdHN0IGluIHtcXFwiaW8xXFxcIiwgXFxcImlvMlxcXCJ9XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIklvcHNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hc3RlclVzZXJQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDggY2hhcmFjdGVycyB3aXRob3V0ICcvJywgJ0AnLCAnXFxcXFxcXCInIG9yIHNwYWNlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNwd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIlxcblxcbl9wZl9yZHNwd190eXBlcyA6PSB7XFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIiwgXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwifVxcblxcbl9wZl9yZHNwd19mb3JiaWRkZW4gOj0ge1xcXCIvXFxcIiwgXFxcIkBcXFwiLCBcXFwiXFxcXFxcXCJcXFwiLCBcXFwiIFxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtcGFzc3dvcmQtdmFsaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1hc3RlclVzZXJQYXNzd29yZFxcXCIsXFxuXFx0XFxcIk1hc3RlclVzZXJQYXNzd29yZCBpcyBzaG9ydGVyIHRoYW4gOCBjaGFyYWN0ZXJzOyBSRFMgcmVqZWN0cyBpdCBhdCBjcmVhdGUgdGltZVxcXCIsXFxuXFx0XFxcIlVzZSA4KyBjaGFyYWN0ZXJzLCBvciBhIFNlY3JldHMgTWFuYWdlciByZWZlcmVuY2VcXFwiLFxcblxcdF9wZl9yZHNwd191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIF9wZl9yZHNwd190eXBlc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRwdyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1hc3RlclVzZXJQYXNzd29yZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHB3KVxcblxcdGNvdW50KHB3KSA8IDhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtcGFzc3dvcmQtdmFsaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1hc3RlclVzZXJQYXNzd29yZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWFzdGVyVXNlclBhc3N3b3JkIGNvbnRhaW5zICclcyc7IFJEUyBmb3JiaWRzICcvJywgJ0AnLCBkb3VibGUgcXVvdGVzIGFuZCBzcGFjZXNcXFwiLCBbY2hdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBmb3JiaWRkZW4gY2hhcmFjdGVyLCBvciB1c2UgYSBTZWNyZXRzIE1hbmFnZXIgcmVmZXJlbmNlXFxcIixcXG5cXHRfcGZfcmRzcHdfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiBfcGZfcmRzcHdfdHlwZXNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0cHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiKVxcblxcdGlzX3N0cmluZyhwdylcXG5cXHRzb21lIGNoIGluIF9wZl9yZHNwd19mb3JiaWRkZW5cXG5cXHRjb250YWlucyhwdywgY2gpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXBvcnQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGRhdGFiYXNlIHBvcnQgbXVzdCBiZSB3aXRoaW4gMTE1MC02NTUzNVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzcG9ydF9vdXQobikgaWYgbiA8IDExNTBcXG5cXG5fcGZfcmRzcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9ydCAldiBpcyBvdXRzaWRlIDExNTAtNjU1MzUgKFxcXFxcXFwiSW52YWxpZCBlbmRwb2ludCBwb3J0ICV2LiBWYWxpZCByYW5nZSBpczogMTE1MC02NTUzNVxcXFxcXFwiKVxcXCIsIFtuLCBuXSksXFxuXFx0XFxcIlBpY2sgYSBwb3J0IGJldHdlZW4gMTE1MCBhbmQgNjU1MzVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvcnRcXFwiKSlcXG5cXHRfcGZfcmRzcG9ydF9vdXQobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtc2VydmVybGVzcy12Mi1jYXBhY2l0eVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXJ2ZXJsZXNzIHYyIE1pbkNhcGFjaXR5IG11c3Qgbm90IGV4Y2VlZCBNYXhDYXBhY2l0eSwgYW5kIE1heENhcGFjaXR5IGlzIGF0IG1vc3QgMjU2XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJDbHVzdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc3N2Ml91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9hdXJvcmEtc2VydmVybGVzcy12Mi5zZXR0aW5nLWNhcGFjaXR5Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc2VydmVybGVzcy12Mi1jYXBhY2l0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWluQ2FwYWNpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbkNhcGFjaXR5ICV2IGV4Y2VlZHMgTWF4Q2FwYWNpdHkgJXYgKFxcXFxcXFwibWluaW11bSBjYXBhY2l0eSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXhpbXVtIGNhcGFjaXR5XFxcXFxcXCIpXFxcIiwgW21uLCBteF0pLFxcblxcdFxcXCJLZWVwIE1pbkNhcGFjaXR5IDw9IE1heENhcGFjaXR5XFxcIixcXG5cXHRfcGZfcmRzc3YyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCQ2x1c3RlclxcXCIpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWluQ2FwYWNpdHlcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbi5NYXhDYXBhY2l0eVxcXCIpKVxcblxcdG1uID4gbXhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc2VydmVybGVzcy12Mi1jYXBhY2l0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWF4Q2FwYWNpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heENhcGFjaXR5ICV2IGlzIGFib3ZlIDI1NiBBQ1VzIChcXFxcXFxcIlRoZSB2YWxpZCBzY2FsaW5nIHJhbmdlIGZvciB0aGlzIGNsdXN0ZXIgaXMgMC4wIHRvIDI1Ni4wLlxcXFxcXFwiKVxcXCIsIFtteF0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAyNTYgQUNVc1xcXCIsXFxuXFx0X3BmX3Jkc3N2Ml91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG14IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1heENhcGFjaXR5XFxcIikpXFxuXFx0bXggPiAyNTZcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtc3VibmV0LWdyb3VwLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiREIgc3VibmV0IGdyb3VwIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgc3BhY2VzLCBkb3QsIHVuZGVyc2NvcmUgYW5kIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1zdWJuZXQtZ3JvdXAtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRCU3VibmV0R3JvdXBOYW1lICclcycgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIkludmFsaWQgc3VibmV0IGdyb3VwIG5hbWVcXFxcXFxcIjogUkRTIGFjY2VwdHMgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBzcGFjZXMsIGRvdCwgdW5kZXJzY29yZSBhbmQgaHlwaGVuXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBzdWJuZXQgZ3JvdXAgdXNpbmcgW2EtekEtWjAtOSAuXy1dIG9ubHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCU3VibmV0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTkgLl8tXXsxLDI1NX0kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtd2luZG93LW92ZXJsYXBcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGJhY2t1cCB3aW5kb3cgYW5kIHRoZSBtYWludGVuYW5jZSB3aW5kb3cgbXVzdCBub3Qgb3ZlcmxhcFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFxcXCJISDpNTVxcXCIgLT4gbWludXRlcyBvZiBkYXk7IHVuZGVmaW5lZCBmb3IgYW55dGhpbmcgZWxzZS4gRGlnaXRzIGdvXFxuIyB0aHJvdWdoIGEgbG9va3VwIHRhYmxlIGJlY2F1c2UgdG9fbnVtYmVyIHJlamVjdHMgbGVhZGluZyB6ZXJvc1xcbiMgKHRvX251bWJlcihcXFwiMDNcXFwiKSBpcyB1bmRlZmluZWQgaW4gdGhlIGVuZ2luZSdzIFJlZ28gYnVpbGQpLlxcbl9wZl9yZHN3b19kaWdpdCA6PSB7XFxcIjBcXFwiOiAwLCBcXFwiMVxcXCI6IDEsIFxcXCIyXFxcIjogMiwgXFxcIjNcXFwiOiAzLCBcXFwiNFxcXCI6IDQsIFxcXCI1XFxcIjogNSwgXFxcIjZcXFwiOiA2LCBcXFwiN1xcXCI6IDcsIFxcXCI4XFxcIjogOCwgXFxcIjlcXFwiOiA5fVxcblxcbl9wZl9yZHN3b19taW4odCkgOj0gbSBpZiB7XFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0cmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB0KVxcblxcdGggOj0gKF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMCwgMSldICogMTApICsgX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCAxLCAxKV1cXG5cXHRtaSA6PSAoX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCAzLCAxKV0gKiAxMCkgKyBfcGZfcmRzd29fZGlnaXRbc3Vic3RyaW5nKHQsIDQsIDEpXVxcblxcdG0gOj0gKGggKiA2MCkgKyBtaVxcbn1cXG5cXG4jIFRoZSBiYWNrdXAgd2luZG93IHJlY3VycyBkYWlseSwgc28gYSBzYW1lLWRheSBtYWludGVuYW5jZSB3aW5kb3dcXG4jIG92ZXJsYXBzIHdoZW5ldmVyIHRoZSB0aW1lLW9mLWRheSBpbnRlcnZhbHMgaW50ZXJzZWN0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXdpbmRvdy1vdmVybGFwXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t1cCB3aW5kb3cgJXMgb3ZlcmxhcHMgbWFpbnRlbmFuY2Ugd2luZG93ICVzOyBSRFMgcmVqZWN0cyB0aGUgcGFpciAoXFxcXFxcXCJUaGUgYmFja3VwIHdpbmRvdyBhbmQgbWFpbnRlbmFuY2Ugd2luZG93IG11c3Qgbm90IG92ZXJsYXAuXFxcXFxcXCIpXFxcIiwgW2J3LCBtd10pLFxcblxcdFxcXCJTZXBhcmF0ZSB0aGUgdHdvIHdpbmRvd3MgaW4gdGltZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcXFwiKVxcblxcdGJ3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcoYncpXFxuXFx0YnAgOj0gc3BsaXQoYncsIFxcXCItXFxcIilcXG5cXHRjb3VudChicCkgPT0gMlxcblxcdGJzIDo9IF9wZl9yZHN3b19taW4oYnBbMF0pXFxuXFx0YmUgOj0gX3BmX3Jkc3dvX21pbihicFsxXSlcXG5cXHRicyA8IGJlXFxuXFx0bXcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKG13KVxcblxcdG1wIDo9IHNwbGl0KGxvd2VyKG13KSwgXFxcIi1cXFwiKVxcblxcdGNvdW50KG1wKSA9PSAyXFxuXFx0bTEgOj0gc3BsaXQobXBbMF0sIFxcXCI6XFxcIilcXG5cXHRtMiA6PSBzcGxpdChtcFsxXSwgXFxcIjpcXFwiKVxcblxcdGNvdW50KG0xKSA9PSAzXFxuXFx0Y291bnQobTIpID09IDNcXG5cXHRtMVswXSA9PSBtMlswXVxcblxcdG1zIDo9IF9wZl9yZHN3b19taW4oc3ByaW50ZihcXFwiJXM6JXNcXFwiLCBbbTFbMV0sIG0xWzJdXSkpXFxuXFx0bWUgOj0gX3BmX3Jkc3dvX21pbihzcHJpbnRmKFxcXCIlczolc1xcXCIsIFttMlsxXSwgbTJbMl1dKSlcXG5cXHRtcyA8IG1lXFxuXFx0YnMgPCBtZVxcblxcdG1zIDwgYmVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDbG91ZEZyb250IGFsaWFzIHRhcmdldCBtdXN0IHVzZSBob3N0ZWQgem9uZSBaMkZEVE5EQVRBUVlXMlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGlzIGFsaWFzZWQgdGhyb3VnaCB0aGUgc2luZ2xlIGdsb2JhbCBob3N0ZWRcXG4jIHpvbmUgWjJGRFROREFUQVFZVzIuIEFueSBvdGhlciBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgKGFuIEFMQidzIHJlZ2lvbmFsXFxuIyB6b25lIGlkIGlzIHRoZSBjbGFzc2ljIHBhc3RlIGVycm9yKSBmYWlscyBhdCBkZXBsb3kgdGltZSB3aXRoIFxcXCJ0aGUgYWxpYXNcXG4jIHRhcmdldCBuYW1lIGRvZXMgbm90IGxpZSB3aXRoaW4gdGhlIHRhcmdldCB6b25lXFxcIi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtYWxpYXMtY2xvdWRmcm9udC16b25lLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhbGlhcyB0YXJnZXRzIGEgQ2xvdWRGcm9udCBkb21haW4sIHNvIEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCBtdXN0IGJlIFoyRkRUTkRBVEFRWVcyLCBub3QgJyVzJ1xcXCIsIFt6aWRdKSxcXG5cXHRcXFwiU2V0IEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCB0byBaMkZEVE5EQVRBUVlXMiAoaW4gdGhlIENESywgcm91dGU1M190YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQgZG9lcyB0aGlzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9jZl9yZWdpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRkbnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5ETlNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoZG5zKVxcblxcdGVuZHN3aXRoKHRyaW1fc3VmZml4KGxvd2VyKGRucyksIFxcXCIuXFxcIiksIFxcXCIuY2xvdWRmcm9udC5uZXRcXFwiKVxcblxcdHppZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHppZClcXG5cXHR6aWQgIT0gXFxcIloyRkRUTkRBVEFRWVcyXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtYXBleC1jbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDTkFNRSByZWNvcmQgaXMgbm90IHBlcm1pdHRlZCBhdCB0aGUgem9uZSBhcGV4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX2FwZXhfbm9ybShuKSA6PSB0cmltX3N1ZmZpeChsb3dlcihuKSwgXFxcIi5cXFwiKVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDIzIGNhdGNoZXMgYW4gYXBleCBDTkFNRSBvbmx5IHdoZW4gdGhlIHJlY29yZCBjYXJyaWVzIGFcXG4jIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUuIENESyBMMiBhbHdheXMgbGlua3MgcmVjb3JkcyB3aXRoXFxuIyBIb3N0ZWRab25lSWQ6IHtcXFwiUmVmXFxcIjogPHpvbmU+fSwgd2hpY2ggRTMwMjMgZG9lcyBub3Qgc2VlIChtZWFzdXJlZCAyMDI2LTA5LTAyLFxcbiMgZW5naW5lIDEuNy4wLWJldGEpLiByZXNvbHZlKCkgdHVybnMgc3VjaCBhIFJlZiBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELFxcbiMgc28gd2hlbiB0aGF0IElEIG5hbWVzIGEgSG9zdGVkWm9uZSBpbiB0aGUgc2FtZSB0ZW1wbGF0ZSB3ZSBjYW4gcmVhZCBpdHNcXG4jIGxpdGVyYWwgTmFtZSBhbmQgZG8gdGhlIGFwZXggY29tcGFyaXNvbiBvdXJzZWx2ZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleCAoJyVzJyk7IHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggXFxcXFxcXCJSUlNldCBvZiB0eXBlIENOQU1FIC4uLiBpcyBub3QgcGVybWl0dGVkIGF0IGFwZXhcXFxcXFxcIlxcXCIsIFtyZWNOYW1lXSksXFxuXFx0XFxcIlVzZSBhbiBhbGlhcyBBL0FBQUEgcmVjb3JkIGZvciB0aGUgYXBleCAoQWxpYXNUYXJnZXQpLCBvciBtb3ZlIHRoZSBDTkFNRSB0byBhIHN1YmRvbWFpblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZXNvdXJjZS1yZWNvcmQtc2V0cy1jaG9vc2luZy1hbGlhcy1ub24tYWxpYXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0enJlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHpyZWYpXFxuXFx0enJlZiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXFxcIilcXG5cXHR6b25lTmFtZSA6PSByZXNvbHZlKHpyZWYsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6b25lTmFtZSlcXG5cXHRyZWNOYW1lIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlY05hbWUpXFxuXFx0X3BmX3I1M19hcGV4X25vcm0ocmVjTmFtZSkgPT0gX3BmX3I1M19hcGV4X25vcm0oem9uZU5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1nZW9sb2NhdGlvbi1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBleHByZXNzZXMgdGhpcyBhcyBhIG9uZU9mLCB3aGljaCB0aGUgc2VydmVyLXNpZGVcXG4jIHByZS1kZXBsb3kgdmFsaWRhdGlvbiBlbmZvcmNlcyAoXFxcIjIgc3Vic2NoZW1hcyBtYXRjaGVkIGluc3RlYWQgb2Ygb25lXFxcIikgYnV0XFxuIyB0aGUgYnVuZGxlZCBlbmdpbmUgZG9lcyBub3QgZXZhbHVhdGUg4oCUIGhlbmNlIHVwc3RyZWFtOiBwZW5kaW5nLWVuZ2luZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIsXFxuXFx0XFxcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGU7IENsb3VkRm9ybWF0aW9uIHJlamVjdHMgdGhlIHJlY29yZCBzZXQgYmVmb3JlIHByb3Zpc2lvbmluZ1xcXCIsXFxuXFx0XFxcIktlZXAgZWl0aGVyIHRoZSBDb250aW5lbnRDb2RlIG9yIHRoZSBDb3VudHJ5Q29kZSAoYWRkIFN1YmRpdmlzaW9uQ29kZSBvbmx5IG5leHQgdG8gQ291bnRyeUNvZGUgVVMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1yb3V0ZTUzLXJlY29yZHNldC1nZW9sb2NhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGdlbyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdlb0xvY2F0aW9uXFxcIilcXG5cXHRpc19vYmplY3QoZ2VvKVxcblxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGdlbywgXFxcIkNvbnRpbmVudENvZGVcXFwiLCBudWxsKSlcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb3VudHJ5Q29kZVxcXCIsIG51bGwpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1wiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGlWYWx1ZUFuc3dlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBBbGlhc1RhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0XFxcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXQ7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIk11bHRpdmFsdWUgYW5zd2VyIHJyc2V0IHNob3VsZCBub3QgYmUgYW4gYWxpYXMgcnJzZXRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBwbGFpbiBtdWx0aXZhbHVlIHJlY29yZHMgd2l0aCBSZXNvdXJjZVJlY29yZHMsIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlciBhbmQga2VlcCB0aGUgYWxpYXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5TIHJlY29yZHMgdGFrZSBubyByb3V0aW5nIHBvbGljeTsgQ05BTUUgY2Fubm90IGJlIG11bHRpdmFsdWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M190eXBvbF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M190eXBvbF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfdHlwb2xfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG4jIE9ubHkgY29tYmluYXRpb25zIHRoYXQgZmFpbGVkIG9uIGEgcmVhbCBkZXBsb3kgYXJlIGZsYWdnZWQuIFNPQS9EUyB3aXRoIGFcXG4jIHJvdXRpbmcgcG9saWN5IGFyZSBhbHNvIGRvY3VtZW50ZWQgYXMgdW5zdXBwb3J0ZWQgYnV0IHdlcmUgbm90IG1lYXN1cmVkLCBzb1xcbiMgdGhleSBhcmUgZGVsaWJlcmF0ZWx5IGxlZnQgb3V0IChzZWUgdGhlIGRpc2NvdmVyeSBpc3N1ZSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQW4gTlMgcmVjb3JkIGNhbm5vdCB1c2UgYSByb3V0aW5nIHBvbGljeTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwidGhpcyB0eXBlIG9mIFJSU2V0IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBhIHNpbXBsZSByZWNvcmQgc2V0IGZvciBOUyByZWNvcmRzIChubyBXZWlnaHQvUmVnaW9uL0ZhaWxvdmVyL0dlb0xvY2F0aW9uL011bHRpVmFsdWVBbnN3ZXIvQ2lkclJvdXRpbmdDb25maWcpXFxcIixcXG5cXHRfcGZfcjUzX3R5cG9sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJOU1xcXCJcXG5cXHRfcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQSBDTkFNRSByZWNvcmQgY2Fubm90IHVzZSB0aGUgbXVsdGl2YWx1ZSBhbnN3ZXIgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJQb2ludCB0aGUgbXVsdGl2YWx1ZSByZWNvcmRzIGF0IEEvQUFBQSAob3IgYW5vdGhlciBzdXBwb3J0ZWQgdHlwZSksIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZWNvcmQgc2V0IG5lZWRzIEFsaWFzVGFyZ2V0IG9yIHRoZSBmdWxsIFRUTCtSZXNvdXJjZVJlY29yZHMgcGFpclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3ZhbHNyY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuIyBUaGUgc2VydmljZSBleHBlY3RzIFxcXCJleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmRcXG4jIFJlc291cmNlUmVjb3Jkc11dXFxcIiAoVHJhZmZpY1BvbGljeUluc3RhbmNlSWQgaGFzIG5vIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5KS5cXG4jIFRoZSBUVEwrQWxpYXNUYXJnZXQgY29tYmluYXRpb24gaXMgYWxyZWFkeSB0aGUgZW5naW5lJ3MgRTMwMjksIHNvIHRoaXMgcnVsZVxcbiMgY292ZXJzIHRoZSByZW1haW5pbmcgc2hhcGVzOiBhbGlhcyBwbHVzIHJlY29yZHMsIGFuZCBhbiBpbmNvbXBsZXRlIG5vbi1hbGlhc1xcbiMgZ3JvdXAgKHJlY29yZHMgd2l0aG91dCBUVEwsIFRUTCB3aXRob3V0IHJlY29yZHMsIG9yIG5laXRoZXIpLlxcbl9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcblxcbl9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKSBpZiB7XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVFRMXFxcIikgIT0gbnVsbFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdFxcXCJBbGlhc1RhcmdldCBhbmQgUmVzb3VyY2VSZWNvcmRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmU7IHRoZSBzZXJ2aWNlIGV4cGVjdHMgZXhhY3RseSBvbmUgb2YgQWxpYXNUYXJnZXQgb3IgVFRMLXBsdXMtUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiS2VlcCB0aGUgQWxpYXNUYXJnZXQgYW5kIGRyb3AgUmVzb3VyY2VSZWNvcmRzLCBvciBtYWtlIGl0IGEgcGxhaW4gcmVjb3JkIHdpdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdF9wZl9yNTNfdmFsc3JjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdFxcXCJBIG5vbi1hbGlhcyByZWNvcmQgc2V0IG5lZWRzIGJvdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHM7IHRoZSBzZXJ2aWNlIHJlamVjdHMgYW4gaW5jb21wbGV0ZSBwYWlyIHdpdGggXFxcXFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmQgUmVzb3VyY2VSZWNvcmRzXV0gLi4uIGZvdW5kIG5vbmVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNwZWNpZnkgVFRMIGFuZCBSZXNvdXJjZVJlY29yZHMgdG9nZXRoZXIsIG9yIHVzZSBBbGlhc1RhcmdldCBpbnN0ZWFkXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRub3QgX3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpXFxufVxcblxcbl9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpIGlmIHtcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBjYW4gdXNlIG9ubHkgb25lIHJvdXRpbmcgcG9saWN5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZW5mb3JjZXMgXFxcIkV4cGVjdGVkIGV4YWN0bHkgb25lIG9mIFtXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsXFxuIyBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgR2VvUHJveGltaXR5TG9jYXRpb24sIG9yIENpZHJSb3V0aW5nQ29uZmlnXVxcXCIuXFxuIyBHZW9Qcm94aW1pdHlMb2NhdGlvbiBpcyBub3QgYSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSwgc28gZml2ZSByZW1haW4gaGVyZS5cXG4jIE11bHRpVmFsdWVBbnN3ZXI6IGZhbHNlIGlzIHRyZWF0ZWQgYXMgYWJzZW50IOKAlCBvbmx5IHRydWUgc2VsZWN0cyB0aGUgcG9saWN5Llxcbl9wZl9yNTNfcG9seF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHByb3ApIGlmIHtcXG5cXHRwcm9wICE9IFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIlxcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG5fcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSkgOj0gcHMgaWYge1xcblxcdHBzIDo9IFtwIHwgc29tZSBwIGluIGFycmF5LmNvbmNhdChfcGZfcjUzX3BvbHhfcHJvcHMsIFtcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJdKTsgX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgcCldXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeSwgYnV0ICV2IGFyZSBhbGwgc3BlY2lmaWVkXFxcIiwgW3BzXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgb2YgV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLCBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgb3IgQ2lkclJvdXRpbmdDb25maWcgYW5kIHNwbGl0IHRoZSByZXN0IGludG8gc2VwYXJhdGUgcmVjb3JkIHNldHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHBzIDo9IF9wZl9yNTNfcG9seF9wb2xpY2llcyhuYW1lKVxcblxcdGNvdW50KHBzKSA+IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNldElkZW50aWZpZXIgYW5kIGEgcm91dGluZyBwb2xpY3kgbXVzdCBhcHBlYXIgdG9nZXRoZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19zaWRwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG5fcGZfcjUzX3NpZHBfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfc2lkcF9wcm9wc1xcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJBIHJvdXRpbmcgcG9saWN5IGlzIGNvbmZpZ3VyZWQgYnV0IFNldElkZW50aWZpZXIgaXMgbWlzc2luZzsgdGhlIENoYW5nZVJlc291cmNlUmVjb3JkU2V0cyBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJNaXNzaW5nIGZpZWxkICdTZXRJZGVudGlmaWVyJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgU2V0SWRlbnRpZmllciB0aGF0IGlzIHVuaXF1ZSBhbW9uZyB0aGUgcmVjb3JkIHNldHMgc2hhcmluZyB0aGlzIE5hbWUgYW5kIFR5cGVcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcblxcdG5vdCBpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiU2V0SWRlbnRpZmllciBpcyBzcGVjaWZpZWQgYnV0IG5vIHJvdXRpbmcgcG9saWN5IGlzOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBmaW5kcyBub25lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFNldElkZW50aWZpZXIgZnJvbSB0aGlzIHNpbXBsZSByZWNvcmQgc2V0LCBvciBhZGQgdGhlIHJvdXRpbmcgcG9saWN5IGl0IHdhcyBtZWFudCBmb3JcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxuXFx0bm90IF9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My10dGwtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRUTCBtdXN0IGZpdCBpbiAzMiBiaXRzICgwLi4yMTQ3NDgzNjQ3IHNlY29uZHMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIGlzIGVuZm9yY2VkOiB0aGUgc2VydmljZSByZWplY3RlZCA5OTk5OTk5OTk5IHdpdGhcXG4jIFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyMTQ3NDgzNjQ3XFxcIi4gTmVnYXRpdmUgVFRMcyBhcmVcXG4jIHVudGVzdGVkLCBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXR0bC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVFRMXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUVEwgbXVzdCBiZSBhdCBtb3N0IDIxNDc0ODM2NDcgc2Vjb25kcywgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFRUTCB0byBhIDMyLWJpdCB2YWx1ZTsgYW55dGhpbmcgYWJvdmUgYSBkYXkgcmFyZWx5IGhlbHBzIGNhY2hpbmcgYW55d2F5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIodClcXG5cXHRuID4gMjE0NzQ4MzY0N1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXZWlnaHQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgMzAwIHdpdGggXFxcIk1lbWJlclxcbiMgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyNTVcXFwiLiBOZWdhdGl2ZSB3ZWlnaHRzIGFyZSB1bnRlc3RlZCxcXG4jIHNvIHRoZXkgYXJlIGRlbGliZXJhdGVseSBub3QgZmxhZ2dlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiLFxcblxcdHNwcmludGYoXFxcIldlaWdodCBtdXN0IGJlIGF0IG1vc3QgMjU1LCBnb3QgJXZcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgV2VpZ2h0IHRvIGEgdmFsdWUgaW4gWzAsIDI1NV07IHdlaWdodHMgYXJlIHJlbGF0aXZlLCBzbyBzY2FsZSB0aGUgZ3JvdXAgZG93biBwcm9wb3J0aW9uYWxseVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHcpXFxuXFx0biA+IDI1NVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIb3N0ZWRab25lTmFtZSBtdXN0IGVuZCB3aXRoIGEgdHJhaWxpbmcgZG90XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24gbG9va3MgdGhlIHpvbmUgdXAgYnkgdGhlIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUgYW5kIGRvZXMgbm90XFxuIyBub3JtYWxpemUgdGhlIHRyYWlsaW5nIGRvdDogdGhlIHNhbWUgc3RhY2sgZGVwbG95ZWQgY2xlYW4gd2l0aFxcbiMgXFxcInpvbmUuZXhhbXBsZS5cXFwiIGFuZCBmYWlsZWQgd2l0aCBOb3RGb3VuZCBmb3IgXFxcInpvbmUuZXhhbXBsZVxcXCIgKDIwMjYtMDktMDIpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My16b25lbmFtZS10cmFpbGluZy1kb3RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIb3N0ZWRab25lTmFtZSAnJXMnIGlzIG1pc3NpbmcgdGhlIHRyYWlsaW5nIGRvdCwgc28gQ2xvdWRGb3JtYXRpb24gZmFpbHMgdGhlIGxvb2t1cCB3aXRoIFxcXFxcXFwiTm8gaG9zdGVkIHpvbmUgd2l0aCBuYW1lIC4uLiBmb3VuZFxcXFxcXFwiXFxcIiwgW3puXSksXFxuXFx0c3ByaW50ZihcXFwiVXNlICclcy4nICh3aXRoIHRoZSB0cmFpbGluZyBkb3QpXFxcIiwgW3puXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0em4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHpuKVxcblxcdHpuICE9IFxcXCJcXFwiXFxuXFx0bm90IGVuZHN3aXRoKHpuLCBcXFwiLlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRyYW5zZmVyIEFjY2VsZXJhdGlvbiByZWplY3RzIGJ1Y2tldCBuYW1lcyB3aXRoIHBlcmlvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGVuZHBvaW50cyBhcmUgRE5TLWJhc2VkLCBzbyBidWNrZXQgbmFtZXMgY29udGFpbmluZ1xcbiMgcGVyaW9kcyBhcmUgcmVqZWN0ZWQgYXQgY3JlYXRpb24uIE9ubHkgYSBsaXRlcmFsIEJ1Y2tldE5hbWUgaXMgY2hlY2thYmxlO1xcbiMgQ0RLLWdlbmVyYXRlZCBuYW1lcyBuZXZlciBjb250YWluIHBlcmlvZHMgYW55d2F5LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCdWNrZXQgbmFtZSAnJXMnIGNvbnRhaW5zIHBlcmlvZHMsIHdoaWNoIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBkb2VzIG5vdCBzdXBwb3J0OyBDcmVhdGVCdWNrZXQgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBidWNrZXRzIHdpdGggcGVyaW9kcyAoLikgaW4gdGhlaXIgbmFtZXNcXFxcXFxcIlxcXCIsIFtibl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGJ1Y2tldCB3aXRob3V0IHBlcmlvZHMsIG9yIGRyb3AgQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS90cmFuc2Zlci1hY2NlbGVyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbi5BY2NlbGVyYXRpb25TdGF0dXNcXFwiKSA9PSBcXFwiRW5hYmxlZFxcXCJcXG5cXHRibiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJ1Y2tldE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhibilcXG5cXHRjb250YWlucyhibiwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0LWxldmVsIGFjdGlvbnMgbmVlZCBhbiBvYmplY3QtbGV2ZWwgUmVzb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQW4gb2JqZWN0LWxldmVsIGFjdGlvbiB3aG9zZSBzdGF0ZW1lbnQgbGlzdHMgb25seSBidWNrZXQtbGV2ZWwgQVJOcyBhcHBsaWVzXFxuIyB0byBub3RoaW5nLCBhbmQgUzMgcmVqZWN0cyB0aGUgcG9saWN5LiBBIGJ1Y2tldC1sZXZlbCBBUk4gaXMgcHJvdmFibGUgdHdvXFxuIyB3YXlzOiBhIGxpdGVyYWwgYXJuOi4uLjpzMzo6Om5hbWUgd2l0aCBubyBcXFwiL1xcXCIgaW4gdGhlIG5hbWUgcGFydCwgb3IgYSB2YWx1ZVxcbiMgdGhhdCByZXNvbHZlKCkgdHVybnMgaW50byB0aGUgbG9naWNhbCBJRCBvZiBhbiBpbi10ZW1wbGF0ZSBidWNrZXQgKFJlZiBhbmRcXG4jIEZuOjpHZXRBdHQgQXJuIGJvdGggZG8g4oCUIHRoZSBHZXRBdHQgb2YgYSBidWNrZXQgaXMgaXRzIGJ1Y2tldCBBUk4pLiBGaXJlc1xcbiMgb25seSB3aGVuIGV2ZXJ5IHJlc291cmNlIGluIHRoZSBzdGF0ZW1lbnQgaXMgcHJvdmFibHkgYnVja2V0LWxldmVsLCBzb1xcbiMgdW5yZXNvbHZhYmxlIGVudHJpZXMgKGUuZy4gRm46OlN1YiBcXFwiJHtCLkFybn0vKlxcXCIpIG11dGUgdGhlIHN0YXRlbWVudC5cXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmdldG9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpwdXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6ZGVsZXRlb2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgbG93ZXIoYSkgaW4ge1xcXCJzMzphYm9ydG11bHRpcGFydHVwbG9hZFxcXCIsIFxcXCJzMzpyZXN0b3Jlb2JqZWN0XFxcIiwgXFxcInMzOmxpc3RtdWx0aXBhcnR1cGxvYWRwYXJ0c1xcXCJ9XFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYgciBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXG5fcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKSBpZiB7XFxuXFx0c3RhcnRzd2l0aChyLCBcXFwiYXJuOlxcXCIpXFxuXFx0Y29udGFpbnMociwgXFxcIjpzMzo6OlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQociwgXFxcIjo6OlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG5cXHRub3QgY29udGFpbnMocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxuX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIGkpIDo9IFthXSBpZiB7XFxuXFx0YSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtpXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBhY3RzIGlmIHtcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0YWN0cyA6PSBbdiB8IHNvbWUgaXQgaW4gaXRlbXM7IHYgOj0gaXQudmFsdWU7IGlzX3N0cmluZyh2KV1cXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gW3JdIGlmIHtcXG5cXHRyIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhyKVxcbn1cXG5cXG5fcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBpKSA6PSBycyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0cnMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2UuJWRcXFwiLCBbaSwgaXQuaW5kZXhdKSk7IGlzX3N0cmluZyh2KV1cXG5cXHRjb3VudChycykgPT0gY291bnQoaXRlbXMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYnVja2V0LXBvbGljeS1hY3Rpb24tcmVzb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3N0LmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQWN0aW9uICclcycgdGFyZ2V0cyBvYmplY3RzIGJ1dCB0aGUgc3RhdGVtZW50J3MgcmVzb3VyY2VzIGFyZSBhbGwgYnVja2V0LWxldmVsIEFSTnM7IFMzIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiQWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIGFueSByZXNvdXJjZShzKSBpbiBzdGF0ZW1lbnRcXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIkFkZCB0aGUgb2JqZWN0IGZvcm0gb2YgdGhlIEFSTiAoYXBwZW5kIC8qIG9yIGEga2V5IHBhdHRlcm4pIHRvIFJlc291cmNlLCBvciBkcm9wIHRoZSBvYmplY3QtbGV2ZWwgYWN0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdHNvbWUgYSBpbiBfcGZfczNicGFyX2FjdGlvbnMobmFtZSwgc3QuaW5kZXgpXFxuXFx0X3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpXFxuXFx0cnMgOj0gX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgc3QuaW5kZXgpXFxuXFx0Y291bnQocnMpID4gMFxcblxcdGV2ZXJ5IHIgaW4gcnMge1xcblxcdFxcdF9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVja2V0IHBvbGljeSBzdGF0ZW1lbnRzIG5lZWQgYSBQcmluY2lwYWxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVzb3VyY2UtYmFzZWQgcG9saWNpZXMgcmVxdWlyZSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgaW4gZXZlcnlcXG4jIHN0YXRlbWVudCDigJQgdW5saWtlIGlkZW50aXR5IHBvbGljaWVzLCB3aGVyZSBjZm4tbGludC1ncmFkZSBjaGVja3MgYXJlXFxuIyB0dW5lZC4gQW4gdW5yZXNvbHZhYmxlIFByaW5jaXBhbCB2YWx1ZSBzdGlsbCBjb3VudHMgYXMgcHJlc2VudC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZFxcXCIsIFtzdC5pbmRleF0pLFxcblxcdFxcXCJUaGUgc3RhdGVtZW50IGhhcyBuZWl0aGVyIFByaW5jaXBhbCBub3IgTm90UHJpbmNpcGFsOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIk1pc3NpbmcgcmVxdWlyZWQgZmllbGQgUHJpbmNpcGFsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgdG8gdGhlIHN0YXRlbWVudCDigJQgYnVja2V0IHBvbGljaWVzIGFsd2F5cyBuYW1lIHdobyB0aGV5IGFwcGx5IHRvXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzdC52YWx1ZSwgXFxcIk5vdFByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpZmVjeWNsZSBhcmNoaXZlIHRyYW5zaXRpb25zIG11c3QgY29tZSAzMCsgZGF5cyBhZnRlciBJQSwgYW5kIGV4cGlyYXRpb24gYWZ0ZXIgZXZlcnkgdHJhbnNpdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Mzb3JkX2ZpeCA6PSBcXFwiT3JkZXIgdGhlIGxpZmVjeWNsZSBkYXlzIHNvIGFyY2hpdmUgdHJhbnNpdGlvbnMgY29tZSBhdCBsZWFzdCAzMCBkYXlzIGFmdGVyIElBIHRyYW5zaXRpb25zIGFuZCBleHBpcmF0aW9uIGNvbWVzIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cXFwiXFxuXFxuX3BmX3Mzb3JkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbGlmZWN5Y2xlLXRyYW5zaXRpb24tZ2VuZXJhbC1jb25zaWRlcmF0aW9ucy5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5UcmFuc2l0aW9uc1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiVHJhbnNpdGlvbiB0byAlcyBhdCAldiBkYXlzIGlzIGxlc3MgdGhhbiAzMCBkYXlzIGFmdGVyIHRoZSAlcyB0cmFuc2l0aW9uIGF0ICV2IGRheXM7IFMzIHJlcXVpcmVzIG9iamVjdHMgdG8gc3RheSBhdCBsZWFzdCAzMCBkYXlzIGluIElBIHN0b3JhZ2VcXFwiLCBbc2MyLCBkMiwgc2MxLCBkMV0pLFxcblxcdF9wZl9zM29yZF9maXgsIF9wZl9zM29yZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdDEgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDEpXFxuXFx0c2MxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzEgaW4ge1xcXCJTVEFOREFSRF9JQVxcXCIsIFxcXCJPTkVaT05FX0lBXFxcIn1cXG5cXHRyYXcxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcxICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZDEgOj0gdG9fbnVtYmVyKHJhdzEpXFxuXFx0c29tZSB0MiBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0MilcXG5cXHRzYzIgOj0gb2JqZWN0LmdldCh0MiwgXFxcIlN0b3JhZ2VDbGFzc1xcXCIsIFxcXCJcXFwiKVxcblxcdHNjMiBpbiB7XFxcIkdMQUNJRVJcXFwiLCBcXFwiREVFUF9BUkNISVZFXFxcIn1cXG5cXHRyYXcyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcyICE9IG51bGxcXG5cXHRkMiA6PSB0b19udW1iZXIocmF3MilcXG5cXHRkMiA8IGQxICsgMzBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgKCV2KSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBUcmFuc2l0aW9uSW5EYXlzICgldik7IFMzIHJlamVjdHMgbGlmZWN5Y2xlIHJ1bGVzIHRoYXQgZXhwaXJlIG9iamVjdHMgYmVmb3JlIG9yIHdoZW4gdGhleSB0cmFuc2l0aW9uXFxcIiwgW2UsIGRdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3ZSA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXdlICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZSA6PSB0b19udW1iZXIocmF3ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdCBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0KVxcblxcdHJhd2QgOj0gb2JqZWN0LmdldCh0LCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZCAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3ZClcXG5cXHRlIDw9IGRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4cGlyYXRpb25JbkRheXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgRXhwaXJhdGlvbkluRGF5cyBhcyBhIGJhcmUgaW50ZWdlciB3aXRoIG5vXFxuIyBtaW5pbXVtLCBzbyAwIGFuZCBuZWdhdGl2ZXMgcmVhY2ggdGhlIHNlcnZpY2UuIE9ubHkgdGhlIEV4cGlyYXRpb24gYWN0aW9uXFxuIyB3YXMgYmVuY2gtdmVyaWZpZWQ7IG90aGVyIGRheSBmaWVsZHMgYXJlIGxlZnQgYWxvbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgaXMgJXY7IFMzIHJlamVjdHMgdGhlIHJ1bGUgd2l0aCBcXFxcXFxcIidEYXlzJyBmb3IgRXhwaXJhdGlvbiBhY3Rpb24gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcXFxcXFxcIlxcXCIsIFtkXSksXFxuXFx0XFxcIlVzZSBhbiBFeHBpcmF0aW9uSW5EYXlzIG9mIDEgb3IgbW9yZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ICE9IG51bGxcXG5cXHRkIDo9IHRvX251bWJlcihyYXcpXFxuXFx0ZCA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBsaWZlY3ljbGUgcnVsZSBuZWVkcyBhdCBsZWFzdCBvbmUgYWN0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB0ZW4gYWN0aW9uIGZpZWxkcywgdmVyYmF0aW0gZnJvbSB0aGUgc2VydmljZSBlcnJvci4gQSBmaWVsZCB3aG9zZSB2YWx1ZVxcbiMgaXMgYW4gdW5yZXNvbHZhYmxlIGludHJpbnNpYyBzdGlsbCBjb3VudHMgYXMgcHJlc2VudCAoZmFpbCBjbG9zZWQpLlxcbl9wZl9zM2xuYV9hY3Rpb25zIDo9IHtcXG5cXHRcXFwiQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkRhdGVcXFwiLFxcblxcdFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIixcXG5cXHRcXFwiRXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlclxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNcXFwiLFxcblxcdFxcXCJUcmFuc2l0aW9uXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvbnNcXFwiLFxcbn1cXG5cXG5fcGZfczNsbmFfaGFzX2FjdGlvbihydWxlKSBpZiB7XFxuXFx0c29tZSBrIGluIF9wZl9zM2xuYV9hY3Rpb25zXFxuXFx0b2JqZWN0LmdldChydWxlLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWRcXFwiLCBbci5pbmRleF0pLFxcblxcdFxcXCJUaGUgbGlmZWN5Y2xlIHJ1bGUgc3BlY2lmaWVzIG5vIGFjdGlvbjsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mIFtFeHBpcmF0aW9uRGF0ZSxFeHBpcmF0aW9uSW5EYXlzLEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZCxUcmFuc2l0aW9uLC4uLl0gbmVlZHMgdG8gYmUgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYW4gZXhwaXJhdGlvbiwgdHJhbnNpdGlvbiwgb3IgYWJvcnQtaW5jb21wbGV0ZS1tdWx0aXBhcnQtdXBsb2FkIGFjdGlvbiB0byB0aGUgcnVsZSwgb3IgcmVtb3ZlIHRoZSBydWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtcnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdG5vdCBfcGZfczNsbmFfaGFzX2FjdGlvbihyLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW5vdGlmaWNhdGlvbi1vdmVybGFwcGluZy1maWx0ZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm90aWZpY2F0aW9uIGVudHJpZXMgbXVzdCBub3Qgb3ZlcmxhcCBmb3IgdGhlIHNhbWUgZXZlbnQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTMyBrZWVwcyBvbmUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gcGVyIGJ1Y2tldCBhbmQgcmVqZWN0cyBpdCB3aGVuIHR3b1xcbiMgZW50cmllcyAoYWNyb3NzIHF1ZXVlL3RvcGljL2xhbWJkYSBhbGlrZSkgY291bGQgbWF0Y2ggdGhlIHNhbWUgb2JqZWN0IGV2ZW50OlxcbiMgb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgQU5EIG92ZXJsYXBwaW5nIHByZWZpeGVzIEFORCBvdmVybGFwcGluZyBzdWZmaXhlcy5cXG4jIEEgbWlzc2luZyBmaWx0ZXIgc2lkZSBtZWFucyBcXFwiXFxcIiBhbmQgb3ZlcmxhcHMgZXZlcnl0aGluZy4gUGFpcnMgd2l0aCBhblxcbiMgdW5yZXNvbHZhYmxlIGV2ZW50IG9yIGZpbHRlciB2YWx1ZSBhcmUgc2tpcHBlZCDigJQgb3ZlcmxhcCBjYW5ub3QgYmUgcHJvdmVuLlxcblxcbl9wZl9zM25vX2NvbmZpZ3MobmFtZSkgOj0gYXJyYXkuY29uY2F0KGFycmF5LmNvbmNhdChcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5RdWV1ZUNvbmZpZ3VyYXRpb25zXFxcIildLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLlRvcGljQ29uZmlndXJhdGlvbnNcXFwiKV0pLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLkxhbWJkYUNvbmZpZ3VyYXRpb25zXFxcIildKVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IHJ1bGVzIGlmIHtcXG5cXHRmIDo9IG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGYpXFxuXFx0ayA6PSBvYmplY3QuZ2V0KGYsIFxcXCJTM0tleVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGspXFxuXFx0cnVsZXMgOj0gb2JqZWN0LmdldChrLCBcXFwiUnVsZXNcXFwiLCBbXSlcXG5cXHRpc19hcnJheShydWxlcylcXG59XFxuXFxuX3BmX3Mzbm9fcnVsZXMoYykgOj0gW10gaWYge1xcblxcdG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSB2IGlmIHtcXG5cXHR2cyA6PSBbeCB8IHNvbWUgciBpbiBfcGZfczNub19ydWxlcyhjKTsgaXNfb2JqZWN0KHIpOyBsb3dlcihvYmplY3QuZ2V0KHIsIFxcXCJOYW1lXFxcIiwgXFxcIlxcXCIpKSA9PSBraW5kOyB4IDo9IG9iamVjdC5nZXQociwgXFxcIlZhbHVlXFxcIiwgbnVsbCldXFxuXFx0Y291bnQodnMpID4gMFxcblxcdHYgOj0gdnNbMF1cXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSBcXFwiXFxcIiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA9PSAwXFxufVxcblxcbl9wZl9zM25vX3ByZV9vdmVybGFwKGEsIGIpIGlmIHN0YXJ0c3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGIsIGEpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19zdWZfb3ZlcmxhcChhLCBiKSBpZiBlbmRzd2l0aChiLCBhKVxcblxcbiMgXFxcInMzOk9iamVjdENyZWF0ZWQ6KlxcXCIgY292ZXJzIFxcXCJzMzpPYmplY3RDcmVhdGVkOlB1dFxcXCI7IGRyb3AgdGhlIHRyYWlsaW5nIFxcXCIqXFxcIlxcbiMgYW5kIHByZWZpeC1tYXRjaC5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYgZTEgPT0gZTJcXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUxLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTIsIHN1YnN0cmluZyhlMSwgMCwgY291bnQoZTEpIC0gMSkpXFxufVxcblxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiB7XFxuXFx0ZW5kc3dpdGgoZTIsIFxcXCI6KlxcXCIpXFxuXFx0c3RhcnRzd2l0aChlMSwgc3Vic3RyaW5nKGUyLCAwLCBjb3VudChlMikgLSAxKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHdvIG5vdGlmaWNhdGlvbiBlbnRyaWVzIGZvciBvdmVybGFwcGluZyBldmVudCB0eXBlcyAoJyVzJyBhbmQgJyVzJykgaGF2ZSBvdmVybGFwcGluZyBwcmVmaXgvc3VmZml4IGZpbHRlcnM7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkNvbmZpZ3VyYXRpb24gaXMgYW1iaWd1b3VzbHkgZGVmaW5lZC4gQ2Fubm90IGhhdmUgb3ZlcmxhcHBpbmcgc3VmZml4ZXMgaW4gdHdvIHJ1bGVzIGlmIHRoZSBwcmVmaXhlcyBhcmUgb3ZlcmxhcHBpbmcgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGUuXFxcXFxcXCJcXFwiLCBbZTEsIGUyXSksXFxuXFx0XFxcIk1ha2UgdGhlIHByZWZpeGVzIG9yIHN1ZmZpeGVzIGRpc2pvaW50LCBvciBtZXJnZSB0aGUgdHdvIGVudHJpZXMgaW50byBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9ub3RpZmljYXRpb24taG93LXRvLWZpbHRlcmluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRjcyA6PSBfcGZfczNub19jb25maWdzKG5hbWUpXFxuXFx0c29tZSBpLCBhIGluIGNzXFxuXFx0c29tZSBqLCBiIGluIGNzXFxuXFx0aSA8IGpcXG5cXHRlMSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUxKVxcblxcdGUyIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkV2ZW50XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZTIpXFxuXFx0X3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpXFxuXFx0cDEgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChhLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDEpXFxuXFx0cDIgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChiLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDIpXFxuXFx0X3BmX3Mzbm9fcHJlX292ZXJsYXAocDEsIHAyKVxcblxcdHMxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMxKVxcblxcdHMyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMyKVxcblxcdF9wZl9zM25vX3N1Zl9vdmVybGFwKHMxLCBzMilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBuZWVkcyB2ZXJzaW9uaW5nIGVuYWJsZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gb24gaXRzIG93biBkb2VzIE5PVCByZXF1aXJlIE9iamVjdExvY2tFbmFibGVkIOKAlFxcbiMgUzMgYWNjZXB0cyBPYmplY3QgTG9jayBvbiBhbiBleGlzdGluZyB2ZXJzaW9uZWQgYnVja2V0IChiZW5jaCBzMDViIGRlcGxveWVkXFxuIyBjbGVhbikuIFdoYXQgaXQgZG9lcyByZXF1aXJlIGlzIHZlcnNpb25pbmcuIFdoZW4gT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZVxcbiMgdGhlIGJ1Y2tldCBpcyBjcmVhdGVkIGxvY2stZW5hYmxlZCBhbmQgdmVyc2lvbmluZyBjb21lcyB3aXRoIGl0LCBzbyB0aGUgcnVsZVxcbiMgZmlyZXMgb25seSB3aGVuIGxvY2stZW5hYmxlbWVudCBpcyBwcm92YWJseSBvZmYgKGtleSBsaXRlcmFsbHkgYWJzZW50IG9yXFxuIyBsaXRlcmFsIGZhbHNlKSBhbmQgdmVyc2lvbmluZyBpcyBwcm92YWJseSBub3QgZW5hYmxlZC5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk9iamVjdExvY2tFbmFibGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSBmYWxzZVxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gaXMgc2V0IG9uIGEgYnVja2V0IHdob3NlIHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlZlcnNpb25pbmcgbXVzdCBiZSAnRW5hYmxlZCcgb24gdGhlIGJ1Y2tldCB0byBhcHBseSBhIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb25cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnLCBvciBzZXQgT2JqZWN0TG9ja0VuYWJsZWQ6IHRydWUgdG8gY3JlYXRlIHRoZSBidWNrZXQgbG9jay1lbmFibGVkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXHRfcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKVxcblxcdF9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0IExvY2sgZm9yYmlkcyBzdXNwZW5kaW5nIHZlcnNpb25pbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0IExvY2sgZm9yY2UtZW5hYmxlcyB2ZXJzaW9uaW5nIGF0IGNyZWF0aW9uLCBzbyBhIHRlbXBsYXRlIHRoYXQgYWxzb1xcbiMgc3VzcGVuZHMgdmVyc2lvbmluZyBjb250cmFkaWN0cyBpdHNlbGYgYW5kIHRoZSBoYW5kbGVyJ3MgUHV0QnVja2V0VmVyc2lvbmluZ1xcbiMgY2FsbCBpcyByZWplY3RlZC4gRmlyZXMgb25seSBvbiBhIGxpdGVyYWwgXFxcIlN1c3BlbmRlZFxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiLFxcblxcdFxcXCJPYmplY3RMb2NrRW5hYmxlZCBpcyB0cnVlIGJ1dCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiBzdXNwZW5kcyB2ZXJzaW9uaW5nOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJBbiBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgb24gdGhpcyBidWNrZXQsIHNvIHRoZSB2ZXJzaW9uaW5nIHN0YXRlIGNhbm5vdCBiZSBjaGFuZ2VkLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgKG9yIGRyb3AgaXQg4oCUIE9iamVjdCBMb2NrIGVuYWJsZXMgdmVyc2lvbmluZyBpdHNlbGYpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSB0cnVlXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLWRlc3QtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSByZXBsaWNhdGlvbiBkZXN0aW5hdGlvbiBidWNrZXQgbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBkZXN0aW5hdGlvbiBzaWRlIG9mIHdoYXQgcGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZyBjaGVja3Mgb25cXG4jIHRoZSBzb3VyY2UuIERlc3RpbmF0aW9uLkJ1Y2tldCBpcyBub3JtYWxseSBGbjo6R2V0QXR0L1JlZiB0byBhbiBpbi10ZW1wbGF0ZVxcbiMgYnVja2V0OyByZXNvbHZlKCkgdHVybnMgYm90aCBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELCBzbyB0aGVcXG4jIGRlc3RpbmF0aW9uJ3Mgb3duIHByb3BlcnRpZXMgYXJlIHJlYWRhYmxlLiBFeHRlcm5hbCBkZXN0aW5hdGlvbiBBUk5zIHJlc29sdmVcXG4jIHRvIHN0cmluZ3MgdGhhdCBhcmUgbm90IGxvZ2ljYWwgSURzIGFuZCBza2lwLiBWZXJzaW9uaW5nIGlzIFxcXCJub3QgZW5hYmxlZFxcXCJcXG4jIHdoZW4gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gaXMgbGl0ZXJhbGx5IGFic2VudCAocHJvdmVuIHZpYVxcbiMgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKSBvciBTdGF0dXMgcmVzb2x2ZXMgdG8gXFxcIlN1c3BlbmRlZFxcXCI7IGFuXFxuIyB1bnJlc29sdmFibGUgU3RhdHVzIHNraXBzLlxcbl9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW2Rlc3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHJlc29sdmUoZGVzdCwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiUmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0ICclcycgZG9lcyBub3QgaGF2ZSB2ZXJzaW9uaW5nIGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkRlc3RpbmF0aW9uIGJ1Y2tldCBtdXN0IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkXFxcXFxcXCJcXFwiLCBbZGVzdF0pLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyBvbiB0aGUgZGVzdGluYXRpb24gYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRkZXN0IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRGVzdGluYXRpb24uQnVja2V0XFxcIiwgW3IuaW5kZXhdKSlcXG5cXHRpc19zdHJpbmcoZGVzdClcXG5cXHRkZXN0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdF9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdmVyc2lvbmluZyB0byBiZSBlbmFibGVkIG9uIHRoZSBzb3VyY2UgYnVja2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOmBleWPjeOBq+OBmeOCi+OBruOBryBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiDjgYzmloflrZfjganjgYrjgorkuI3lnKjvvIhpbnB1dC5yZXNvdXJjZXMg44GnXFxuIyDoqLzmmI7jgIFBR0VOVFMubWQg5Y+C54Wn77yJ44GL44CBU3RhdHVzIOOBjOODquODhuODqeODq+OBpyBcXFwiU3VzcGVuZGVkXFxcIiDjga7jgajjgY3jgaDjgZHjgIJcXG4jIOacquino+axuuODiOODvOOCr+ODs+OBryBPSyDmibHjgYTvvIhyZXNvbHZlKCkg44Gv44Kt44O85LiN5Zyo44Go5pyq6Kej5rG644Gu5Lih5pa544GnIHVuZGVmaW5lZCDjgatcXG4jIOOBquOCi+OBn+OCgeOAgWBub3QgcmVzb2x2ZSguLi4pYCDjgafjga/kuI3lnKjjgpLoqLzmmI7jgafjgY3jgarjgYQg4oCUIDIwMjYtMDktMDIg5a6f5ris77yJ44CCXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIGlzIHNldCBidXQgYnVja2V0IHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYXQgZGVwbG95IHRpbWUgKEludmFsaWRSZXF1ZXN0OiBWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQpXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIHNvdXJjZSBidWNrZXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9yZXBsaWNhdGlvbi1yZXF1aXJlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIHdlYnNpdGUgc2V0dGluZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gcmVkaXJlY3RzIHRoZSB3aG9sZSBzaXRlLCBzbyBTMyByZWplY3RzIGFueSBzaWJsaW5nXFxuIyB3ZWJzaXRlIHNldHRpbmcgYWxvbmdzaWRlIGl0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtd2Vic2l0ZS1yZWRpcmVjdC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIldlYnNpdGVDb25maWd1cmF0aW9uIGNvbWJpbmVzIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyB3aXRoICVzOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJbSW5kZXhEb2N1bWVudCwgRXJyb3JEb2N1bWVudCwgUm91dGluZ1J1bGVzXSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBpZiBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBba10pLFxcblxcdFxcXCJLZWVwIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyBhbG9uZSwgb3IgZHJvcCBpdCBhbmQgY29uZmlndXJlIHRoZSB3ZWJzaXRlIHdpdGggSW5kZXhEb2N1bWVudC9FcnJvckRvY3VtZW50L1JvdXRpbmdSdWxlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXdlYnNpdGVjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHdjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb25cXFwiKVxcblxcdGlzX29iamVjdCh3YylcXG5cXHRvYmplY3QuZ2V0KHdjLCBcXFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHNvbWUgayBpbiB7XFxcIkluZGV4RG9jdW1lbnRcXFwiLCBcXFwiRXJyb3JEb2N1bWVudFxcXCIsIFxcXCJSb3V0aW5nUnVsZXNcXFwifVxcblxcdG9iamVjdC5nZXQod2MsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic2NoZWR1bGVyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZMRVhJQkxFIG1vZGUgbmVlZHMgTWF4aW11bVdpbmRvd0luTWludXRlcywgT0ZGIGZvcmJpZHMgaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zY2hmd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtc2NoZWR1bGVyLXNjaGVkdWxlLWZsZXhpYmxldGltZXdpbmRvdy5odG1sXFxcIlxcblxcbl9wZl9zY2hmd19mdHcobmFtZSkgOj0gZnR3IGlmIHtcXG5cXHRmdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3dcXFwiKVxcblxcdGlzX29iamVjdChmdHcpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93Lk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLFxcblxcdFxcXCJGbGV4aWJsZVRpbWVXaW5kb3cuTW9kZSBpcyBGTEVYSUJMRSBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBtaXNzaW5nOyBDcmVhdGVTY2hlZHVsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWF4aW11bVdpbmRvd0luTWludXRlcyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gRkxFWElCTEVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBNYXhpbXVtV2luZG93SW5NaW51dGVzICgxLTE0NDApLCBvciBzd2l0Y2ggTW9kZSB0byBPRkZcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiRkxFWElCTEVcXFwiXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgT0ZGIGJ1dCBNYXhpbXVtV2luZG93SW5NaW51dGVzIGlzIHNldDsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBub3QgYmUgcHJvdmlkZWQgd2hlbiBGbGV4aWJsZVRpbWVXaW5kb3dNb2RlIGlzIHNldCB0byBPRkZcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgTWF4aW11bVdpbmRvd0luTWludXRlcywgb3Igc3dpdGNoIE1vZGUgdG8gRkxFWElCTEVcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiT0ZGXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFNjaGVkdWxlciByYXRlKCkgdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMjcgdmFsaWRhdGVzIHJhdGUoKSBib3VuZHMgZm9yIEFXUzo6RXZlbnRzOjpSdWxlIGJ1dCBub3RcXG4jIGZvciBBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGUg4oCUIHNhbWUgY29uc3RyYWludCBmYW1pbHksIGRpZmZlcmVudCByZXNvdXJjZS5cXG4jIE9ubHkgdGhlIHZhbHVlIGJvdW5kIGlzIGNoZWNrZWQgaGVyZTsgdW5pdCBzcGVsbGluZ3MgZGlmZmVyIGJldHdlZW4gdGhlIHR3b1xcbiMgc2VydmljZXMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIGZvciBTY2hlZHVsZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZWR1bGVFeHByZXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcmF0ZSB2YWx1ZSBpbiAnJXMnIGlzIG5vdCBwb3NpdGl2ZTsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgU2NoZWR1bGUgRXhwcmVzc2lvbiAlcy5cXFxcXFxcIlxcXCIsIFtleHByLCBleHByXSksXFxuXFx0XFxcIlVzZSBhIHJhdGUgb2YgMSBvciBtb3JlIChlLmcuIHJhdGUoNSBtaW51dGVzKSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2NoZWR1bGVyL2xhdGVzdC9Vc2VyR3VpZGUvc2NoZWR1bGUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZXhwciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKGV4cHIpXFxuXFx0dCA6PSB0cmltX3NwYWNlKGV4cHIpXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwicmF0ZShcXFwiKVxcblxcdGVuZHN3aXRoKHQsIFxcXCIpXFxcIilcXG5cXHRpbm5lciA6PSB0cmltX3NwYWNlKHN1YnN0cmluZyh0LCA1LCBjb3VudCh0KSAtIDYpKVxcblxcdHBhcnRzIDo9IHNwbGl0KGlubmVyLCBcXFwiIFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocGFydHNbMF0pXFxuXFx0biA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQL1MgRGVsaXZlcnlQb2xpY3kgcmV0cnkgdmFsdWVzOiBtaW5EZWxheVRhcmdldCA+PSAxLCBtYXhEZWxheVRhcmdldCA8PSAzNjAwIGFuZCA+PSBtaW5EZWxheVRhcmdldCwgbnVtUmV0cmllcyAwLi4xMDAgYW5kIGF0IGxlYXN0IHRoZSBzdW0gb2YgdGhlIHBoYXNlIHJldHJpZXMsIHBoYXNlIGNvdW50cyA+PSAwLCBiYWNrb2ZmRnVuY3Rpb24gb25lIG9mIGFyaXRobWV0aWN8ZXhwb25lbnRpYWx8Z2VvbWV0cmljfGxpbmVhciwgbWF4UmVjZWl2ZXNQZXJTZWNvbmQgPj0gMSAoc3Vic2NyaXB0aW9uIERlbGl2ZXJ5UG9saWN5IGFuZCB0b3BpYyBEZWxpdmVyeVBvbGljeS5odHRwKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtbWVzc2FnZS1kZWxpdmVyeS1yZXRyaWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2RwX2ZpeCA6PSBcXFwiS2VlcCB0aGUgcmV0cnkgcG9saWN5IGluc2lkZSB0aGUgZG9jdW1lbnRlZCByYW5nZXMgKHNlZSB0aGUgZGVsaXZlcnkgcG9saWN5IHRhYmxlKVxcXCJcXG5cXG4jIFtuYW1lLCBwYXRoIHByZWZpeCwgaGVhbHRoeVJldHJ5UG9saWN5IG9iamVjdCwgdGhyb3R0bGVQb2xpY3kgb2JqZWN0IG9yIG51bGxdXFxuX3BmX3Nuc2RwX29iaih2KSA6PSB2IGlmIGlzX29iamVjdCh2KVxcblxcbl9wZl9zbnNkcF9vYmoodikgOj0gbyBpZiB7XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0byA6PSBqc29uLnVubWFyc2hhbCh2KVxcblxcdGlzX29iamVjdChvKVxcbn1cXG5cXG5fcGZfc25zZHBfcG9sIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVBvbGljeVxcXCIsIGRwXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRkcCA6PSBfcGZfc25zZHBfb2JqKG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJEZWxpdmVyeVBvbGljeVxcXCIsIG51bGwpKVxcbn1cXG5cXG5fcGZfc25zZHBfcG9sIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVBvbGljeS5odHRwXFxcIiwgZHBdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0dG9wIDo9IF9wZl9zbnNkcF9vYmoob2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkRlbGl2ZXJ5UG9saWN5XFxcIiwgbnVsbCkpXFxuXFx0ZHAgOj0gb2JqZWN0LmdldCh0b3AsIFxcXCJodHRwXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoZHApXFxufVxcblxcbl9wZl9zbnNkcF9yZXRyeSBjb250YWlucyBbbmFtZSwgcGF0aCwgaHJdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBkcF0gaW4gX3BmX3Nuc2RwX3BvbFxcblxcdHNvbWUga2V5IGluIFtcXFwiaGVhbHRoeVJldHJ5UG9saWN5XFxcIiwgXFxcImRlZmF1bHRIZWFsdGh5UmV0cnlQb2xpY3lcXFwiXVxcblxcdGhyIDo9IG9iamVjdC5nZXQoZHAsIGtleSwgbnVsbClcXG5cXHRpc19vYmplY3QoaHIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtwLCBrZXldKVxcbn1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibWluRGVsYXlUYXJnZXRcXFwiLCAxXVxcblxcbl9wZl9zbnNkcF9taW4gY29udGFpbnMgW1xcXCJudW1SZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtTm9EZWxheVJldHJpZXNcXFwiLCAwXVxcblxcbl9wZl9zbnNkcF9taW4gY29udGFpbnMgW1xcXCJudW1NaW5EZWxheVJldHJpZXNcXFwiLCAwXVxcblxcbl9wZl9zbnNkcF9taW4gY29udGFpbnMgW1xcXCJudW1NYXhEZWxheVJldHJpZXNcXFwiLCAwXVxcblxcbl9wZl9zbnNkcF9tYXggY29udGFpbnMgW1xcXCJtYXhEZWxheVRhcmdldFxcXCIsIDM2MDBdXFxuXFxuX3BmX3Nuc2RwX21heCBjb250YWlucyBbXFxcIm51bVJldHJpZXNcXFwiLCAxMDBdXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZGVsaXZlcnktcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtwYXRoLCBmXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgYmVsb3cgJXY7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IC4uLiVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICV2XFxcXFxcXCJcXFwiLCBbZiwgdiwgbSwgZiwgbV0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0c29tZSBbZiwgbV0gaW4gX3BmX3Nuc2RwX21pblxcblxcdHYgOj0gb2JqZWN0LmdldChociwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2IDwgbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW3BhdGgsIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBhYm92ZSAldjsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogLi4uJXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXZcXFxcXFxcIlxcXCIsIFtmLCB2LCBtLCBmLCBtXSksXFxuXFx0X3BmX3Nuc2RwX2ZpeCwgX3BmX3Nuc2RwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGhyXSBpbiBfcGZfc25zZHBfcmV0cnlcXG5cXHRzb21lIFtmLCBtXSBpbiBfcGZfc25zZHBfbWF4XFxuXFx0diA6PSBvYmplY3QuZ2V0KGhyLCBmLCBudWxsKVxcblxcdGlzX251bWJlcih2KVxcblxcdHYgPiBtXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMubWF4RGVsYXlUYXJnZXRcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIm1heERlbGF5VGFyZ2V0ICV2IGlzIGJlbG93IG1pbkRlbGF5VGFyZ2V0ICV2OyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi5tYXhEZWxheVRhcmdldCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5EZWxheVRhcmdldFxcXFxcXFwiXFxcIiwgW214LCBtbl0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0bW4gOj0gb2JqZWN0LmdldChociwgXFxcIm1pbkRlbGF5VGFyZ2V0XFxcIiwgbnVsbClcXG5cXHRteCA6PSBvYmplY3QuZ2V0KGhyLCBcXFwibWF4RGVsYXlUYXJnZXRcXFwiLCBudWxsKVxcblxcdGlzX251bWJlcihtbilcXG5cXHRpc19udW1iZXIobXgpXFxuXFx0bXggPCBtblxcbn1cXG5cXG5fcGZfc25zZHBfcGhhc2UoaHIsIGYpIDo9IHYgaWYge1xcblxcdHYgOj0gb2JqZWN0LmdldChociwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG59XFxuXFxuX3BmX3Nuc2RwX3BoYXNlKGhyLCBmKSA6PSAwIGlmIG5vdCBpc19udW1iZXIob2JqZWN0LmdldChociwgZiwgbnVsbCkpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZGVsaXZlcnktcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5udW1SZXRyaWVzXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJudW1SZXRyaWVzICV2IGlzIGJlbG93IHRoZSBwaGFzZSB0b3RhbCAldiAobnVtTm9EZWxheVJldHJpZXMgKyBudW1NaW5EZWxheVJldHJpZXMgKyBudW1NYXhEZWxheVJldHJpZXMpOyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi5udW1SZXRyaWVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRvdGFsIG9mIG51bU1pbkRlbGF5UmV0cmllcywgbnVtTm9EZWxheVJldHJpZXMgYW5kIG51bU1heERlbGF5UmV0cmllc1xcXFxcXFwiXFxcIiwgW24sIHRvdGFsXSksXFxuXFx0X3BmX3Nuc2RwX2ZpeCwgX3BmX3Nuc2RwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGhyXSBpbiBfcGZfc25zZHBfcmV0cnlcXG5cXHRuIDo9IG9iamVjdC5nZXQoaHIsIFxcXCJudW1SZXRyaWVzXFxcIiwgbnVsbClcXG5cXHRpc19udW1iZXIobilcXG5cXHR0b3RhbCA6PSAoX3BmX3Nuc2RwX3BoYXNlKGhyLCBcXFwibnVtTm9EZWxheVJldHJpZXNcXFwiKSArIF9wZl9zbnNkcF9waGFzZShociwgXFxcIm51bU1pbkRlbGF5UmV0cmllc1xcXCIpKSArIF9wZl9zbnNkcF9waGFzZShociwgXFxcIm51bU1heERlbGF5UmV0cmllc1xcXCIpXFxuXFx0biA8IHRvdGFsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuYmFja29mZkZ1bmN0aW9uXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJiYWNrb2ZmRnVuY3Rpb24gJyVzJyBpcyBub3QgYXJpdGhtZXRpYywgZXhwb25lbnRpYWwsIGdlb21ldHJpYyBvciBsaW5lYXI7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IC4uLiB0aGUgdmFsdWUgWyVzXSBpcyBub3QgYSB2YWxpZCBiYWNrb2ZmIGZ1bmN0aW9uXFxcXFxcXCJcXFwiLCBbYiwgYl0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0YiA6PSBvYmplY3QuZ2V0KGhyLCBcXFwiYmFja29mZkZ1bmN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYilcXG5cXHRub3QgYiBpbiB7XFxcImFyaXRobWV0aWNcXFwiLCBcXFwiZXhwb25lbnRpYWxcXFwiLCBcXFwiZ2VvbWV0cmljXFxcIiwgXFxcImxpbmVhclxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXMubWF4UmVjZWl2ZXNQZXJTZWNvbmRcXFwiLCBbcCwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwibWF4UmVjZWl2ZXNQZXJTZWNvbmQgJXYgaXMgYmVsb3cgMTsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogdGhyb3R0bGVQb2xpY3kubWF4UmVjZWl2ZXNQZXJTZWNvbmQgbXVzdCBiZSA+PSAxXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBkcF0gaW4gX3BmX3Nuc2RwX3BvbFxcblxcdHNvbWUga2V5IGluIFtcXFwidGhyb3R0bGVQb2xpY3lcXFwiLCBcXFwiZGVmYXVsdFRocm90dGxlUG9saWN5XFxcIl1cXG5cXHR0cCA6PSBvYmplY3QuZ2V0KGRwLCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KHRwKVxcblxcdHYgOj0gb2JqZWN0LmdldCh0cCwgXFxcIm1heFJlY2VpdmVzUGVyU2Vjb25kXFxcIiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2IDwgMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLW9ubHktYXR0cmlidXRlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLCBBcmNoaXZlUG9saWN5IGFuZCBGaWZvVGhyb3VnaHB1dFNjb3BlIGFyZSBGSUZPLW9ubHkgdG9waWMgYXR0cmlidXRlcywgYW5kIEFyY2hpdmVQb2xpY3kuTWVzc2FnZVJldGVudGlvblBlcmlvZCBpcyAxLi4zNjUgZGF5c1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVUb3BpYy5odG1sXFxcIlxcblxcbl9wZl9zbnNmb19maXggOj0gXFxcIlNldCBGaWZvVG9waWM6IHRydWUgKHdpdGggYSAqLmZpZm8gVG9waWNOYW1lKSBvciBkcm9wIHRoZSBGSUZPLW9ubHkgYXR0cmlidXRlczsga2VlcCB0aGUgYXJjaGl2ZSByZXRlbnRpb24gd2l0aGluIDEtMzY1IGRheXNcXFwiXFxuXFxuX3BmX3Nuc2ZvX3N0ZCh0KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9Ub3BpY1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nuc2ZvX3N0ZCh0KSBpZiByZXNvbHZlKHQsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLW9ubHktYXR0cmlidXRlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgc2V0IG9uIGEgc3RhbmRhcmQgdG9waWMgKEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZSk7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFVua25vd24gYXR0cmlidXRlICVzXFxcXFxcXCJcXFwiLCBbYXR0ciwgYXR0cl0pLFxcblxcdF9wZl9zbnNmb19maXgsIF9wZl9zbnNmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZvX3N0ZChuYW1lKVxcblxcdHNvbWUgYXR0ciBpbiBbXFxcIkNvbnRlbnRCYXNlZERlZHVwbGljYXRpb25cXFwiLCBcXFwiQXJjaGl2ZVBvbGljeVxcXCIsIFxcXCJGaWZvVGhyb3VnaHB1dFNjb3BlXFxcIl1cXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBhdHRyLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmb19hcmNoaXZlKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJBcmNoaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc25zZm9fYXJjaGl2ZShuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiQXJjaGl2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNmb19udW0odikgOj0gdiBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfc25zZm9fbnVtKHYpIDo9IHRvX251bWJlcih2KSBpZiB7XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgdilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFyY2hpdmVQb2xpY3kuTWVzc2FnZVJldGVudGlvblBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQXJjaGl2ZVBvbGljeS5NZXNzYWdlUmV0ZW50aW9uUGVyaW9kICV2IGlzIG91dHNpZGUgMS4uMzY1IGRheXM7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IEFyY2hpdmVQb2xpY3k6IE1lc3NhZ2VSZXRlbnRpb25QZXJpb2QgdmFsdWUgaXMgaW52YWxpZFxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRfcGZfc25zZm9fZml4LCBfcGZfc25zZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdG4gOj0gX3BmX3Nuc2ZvX251bShvYmplY3QuZ2V0KF9wZl9zbnNmb19hcmNoaXZlKG5hbWUpLCBcXFwiTWVzc2FnZVJldGVudGlvblBlcmlvZFxcXCIsIG51bGwpKVxcblxcdF9wZl9zbnNmb19vdXQobilcXG59XFxuXFxuX3BmX3Nuc2ZvX291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9zbnNmb19vdXQobikgaWYgbiA+IDM2NVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tcXVldWUtb24tc3RhbmRhcmQtdG9waWNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBGSUZPIFNRUyBxdWV1ZSBjYW5ub3Qgc3Vic2NyaWJlIHRvIGEgc3RhbmRhcmQgdG9waWMgKGEgRklGTyB0b3BpYyBtYXkgZmFuIG91dCB0byBzdGFuZGFyZCBxdWV1ZXMsIG5vdCB0aGUgcmV2ZXJzZSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2Zxc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1maWZvLXRvcGljcy5odG1sXFxcIlxcblxcbl9wZl9zbnNmcXNfZml4IDo9IFxcXCJTdWJzY3JpYmUgdGhlIEZJRk8gcXVldWUgdG8gYSBGSUZPIHRvcGljLCBvciB1c2UgYSBzdGFuZGFyZCBxdWV1ZVxcXCJcXG5cXG5fcGZfc25zZnFzX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2Zxc19zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmcXNfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuIyB0b3BpYyBpcyBGSUZPOiBhbiBpbi10ZW1wbGF0ZSB0b3BpYyB3aXRoIEZpZm9Ub3BpYyB0cnVlLCBvciBhIGxpdGVyYWwgQVJOIGVuZGluZyBpbiAuZmlmb1xcbl9wZl9zbnNmcXNfdGZpZm8odCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cmVzb2x2ZSh0LCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcbn1cXG5cXG5fcGZfc25zZnFzX3RmaWZvKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG5fcGZfc25zZnFzX3RzdGQodCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9Ub3BpY1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nuc2Zxc190c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcbn1cXG5cXG5fcGZfc25zZnFzX3RzdGQodCkgaWYge1xcblxcdHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG5fcGZfc25zZnFzX3FmaWZvKGVwKSBpZiB7XFxuXFx0ZXAgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cmVzb2x2ZShlcCwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Zxc19xZmlmbyhlcCkgaWYge1xcblxcdHN0YXJ0c3dpdGgoZXAsIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aChlcCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby1xdWV1ZS1vbi1zdGFuZGFyZC10b3BpY1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pLFxcblxcdFxcXCJhIEZJRk8gcXVldWUgaXMgc3Vic2NyaWJlZCB0byBhIHN0YW5kYXJkIHRvcGljOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBFbmRwb2ludCBSZWFzb246IEZJRk8gU1FTIFF1ZXVlcyBjYW4gbm90IGJlIHN1YnNjcmliZWQgdG8gc3RhbmRhcmQgU05TIHRvcGljc1xcXFxcXFwiXFxcIixcXG5cXHRfcGZfc25zZnFzX2ZpeCwgX3BmX3Nuc2Zxc191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIHRvcGljXSBpbiBfcGZfc25zZnFzX3N1YlxcblxcdF9wZl9zbnNmcXNfdHN0ZCh0b3BpYylcXG5cXHRfcGZfc25zZnFzX3Byb3RvKG5hbWUsIHBhdGgpID09IFxcXCJzcXNcXFwiXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5FbmRwb2ludFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKGVwKVxcblxcdF9wZl9zbnNmcXNfcWZpZm8oZXApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGSUZPIHRvcGljIG5hbWVzIG11c3QgZW5kIHdpdGggJy5maWZvJyAoYW5kICcuZmlmbycgbmFtZXMgcmVxdWlyZSBGaWZvVG9waWMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZmlmb19maXggOj0gXFxcIkdpdmUgRklGTyB0b3BpY3MgYSBUb3BpY05hbWUgZW5kaW5nIGluICcuZmlmbycgKG9yIGRyb3AgVG9waWNOYW1lIHRvIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmUpLCBhbmQgc2V0IEZpZm9Ub3BpYzogdHJ1ZSB3aGVuZXZlciB0aGUgbmFtZSBlbmRzIGluICcuZmlmbydcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtY3JlYXRlLWZpZm8tdG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZmlmb190cnVlKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIEZpZm9Ub3BpYyDjgYzlrZjlnKjjgZfjgIHjg6rjg4bjg6njg6sgZmFsc2Ug5Lul5aSW77yIdHJ1ZSDjgoTjg4jjg7zjgq/jg7PvvInjgarjgonjgIxGSUZPIOOBi+OCguOBl+OCjOOBquOBhOOAjeaJseOBhFxcbl9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSkgaWYge1xcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKVxcblxcdG5vdCB2IGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby10b3BpYy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkZpZm9Ub3BpYyBpcyB0cnVlIGJ1dCBUb3BpY05hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLmZpZm8nOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRfcGZfc25zZmlmb190cnVlKG5hbWUpXFxuXFx0dG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh0bilcXG5cXHRub3QgZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBlbmRzIHdpdGggJy5maWZvJyBidXQgRmlmb1RvcGljIGlzIG5vdCB0cnVlOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgbmFtZSBhdCBkZXBsb3kgdGltZVxcXCIsIFt0bl0pLFxcblxcdF9wZl9zbnNmaWZvX2ZpeCwgX3BmX3Nuc2ZpZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0ZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxuXFx0bm90IF9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlmby10b3BpYy1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEZJRk8gdG9waWMgb25seSBhY2NlcHRzIHNxcyBzdWJzY3JpcHRpb25zIChsYW1iZGEsIGh0dHAvaHR0cHMsIGVtYWlsLCBlbWFpbC1qc29uLCBzbXMsIGZpcmVob3NlIGFyZSByZWplY3RlZClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2Z0cF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1maWZvLXRvcGljcy5odG1sXFxcIlxcblxcbl9wZl9zbnNmdHBfZml4IDo9IFxcXCJTdWJzY3JpYmUgYW4gU1FTIHF1ZXVlIChGSUZPIG9yIHN0YW5kYXJkKSB0byB0aGUgRklGTyB0b3BpYywgb3IgdXNlIGEgc3RhbmRhcmQgdG9waWMgZm9yIG90aGVyIHByb3RvY29sc1xcXCJcXG5cXG5fcGZfc25zZnRwX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2Z0cF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmdHBfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuIyB0b3BpYyBpcyBGSUZPOiBhbiBpbi10ZW1wbGF0ZSB0b3BpYyB3aXRoIEZpZm9Ub3BpYyB0cnVlLCBvciBhIGxpdGVyYWwgQVJOIGVuZGluZyBpbiAuZmlmb1xcbl9wZl9zbnNmdHBfdGZpZm8odCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cmVzb2x2ZSh0LCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcbn1cXG5cXG5fcGZfc25zZnRwX3RmaWZvKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG5fcGZfc25zZnRwX3RzdGQodCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9Ub3BpY1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nuc2Z0cF90c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcbn1cXG5cXG5fcGZfc25zZnRwX3RzdGQodCkgaWYge1xcblxcdHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiYSBGSUZPIHRvcGljIGlzIHN1YnNjcmliZWQgd2l0aCBwcm90b2NvbCAlczsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogSW52YWxpZCBwcm90b2NvbCB0eXBlOiAlc1xcXFxcXFwiXFxcIiwgW3Byb3RvLCBwcm90b10pLFxcblxcdF9wZl9zbnNmdHBfZml4LCBfcGZfc25zZnRwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgdG9waWNdIGluIF9wZl9zbnNmdHBfc3ViXFxuXFx0X3BmX3Nuc2Z0cF90Zmlmbyh0b3BpYylcXG5cXHRwcm90byA6PSBfcGZfc25zZnRwX3Byb3RvKG5hbWUsIHBhdGgpXFxuXFx0cHJvdG8gIT0gXFxcInNxc1xcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlsdGVyLXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGaWx0ZXJQb2xpY3kgc2hhcGU6IGF0IG1vc3QgNSBrZXlzLCBldmVyeSB2YWx1ZSBhbiBhcnJheSBvciBvYmplY3QsIG5vIGVtcHR5IGFycmF5cywgbm8gYXJyYXlzIGluc2lkZSBhcnJheXMsIG5lc3Rpbmcgb25seSB3aXRoIEZpbHRlclBvbGljeVNjb3BlIE1lc3NhZ2VCb2R5LCBhbmQgRmlsdGVyUG9saWN5U2NvcGUgaXMgTWVzc2FnZUF0dHJpYnV0ZXMgb3IgTWVzc2FnZUJvZHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLXN1YnNjcmlwdGlvbi1maWx0ZXItcG9saWNpZXMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZnBfZml4IDo9IFxcXCJLZWVwIHRoZSBmaWx0ZXIgcG9saWN5IHRvIDUga2V5cyBvZiBub24tZW1wdHkgYXJyYXlzIChvciBuZXN0ZWQgb2JqZWN0cyB3aXRoIEZpbHRlclBvbGljeVNjb3BlOiBNZXNzYWdlQm9keSlcXFwiXFxuXFxuX3BmX3Nuc2ZwX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2ZwX3N1YiBjb250YWlucyBbbmFtZSwgcGF0aCwgc3ViLCBuYW1lXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHNvbWUgcyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gcy52YWx1ZVxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvbi4lZFxcXCIsIFtzLmluZGV4XSlcXG59XFxuXFxuX3BmX3Nuc2ZwX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbl9wZl9zbnNmcF9wb2woc3ViKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KHN1YiwgXFxcIkZpbHRlclBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nuc2ZwX3BvbChzdWIpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoc3ViLCBcXFwiRmlsdGVyUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nuc2ZwX2VyciA6PSBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBGaWx0ZXJQb2xpY3k6IFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3lcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBoYXMgJWQga2V5cyAobWF4aW11bSA1KTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc0ZpbHRlciBwb2xpY3kgY2FuIG5vdCBoYXZlIG1vcmUgdGhhbiA1IGtleXNcXFxcXFxcIlxcXCIsIFtuLCBfcGZfc25zZnBfZXJyXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdG4gOj0gY291bnQob2JqZWN0LmtleXMoX3BmX3Nuc2ZwX3BvbChzdWIpKSlcXG5cXHRuID4gNVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBoYXMgYSBzY2FsYXIgdmFsdWU7IGVhY2gga2V5IHRha2VzIGFuIGFycmF5IG9mIG1hdGNoIHZhbHVlcyAob3IgYW4gb2JqZWN0IHdpdGggRmlsdGVyUG9saWN5U2NvcGUgTWVzc2FnZUJvZHkpLCBhbmQgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlcXFxcXFxcIlxcXCIsIFtrLCBfcGZfc25zZnBfZXJyLCBrXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdHNvbWUgaywgdiBpbiBfcGZfc25zZnBfcG9sKHN1YilcXG5cXHRub3QgaXNfYXJyYXkodilcXG5cXHRub3QgaXNfb2JqZWN0KHYpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpbHRlci1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkZpbHRlclBvbGljeS4lc1xcXCIsIFtwYXRoLCBrXSksXFxuXFx0c3ByaW50ZihcXFwiRmlsdGVyUG9saWN5IGtleSAnJXMnIGlzIGFuIGVtcHR5IGFycmF5OyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzRW1wdHkgYXJyYXlzIGFyZSBub3QgYWxsb3dlZFxcXFxcXFwiXFxcIiwgW2ssIF9wZl9zbnNmcF9lcnJdKSxcXG5cXHRfcGZfc25zZnBfZml4LCBfcGZfc25zZnBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZnBfc3ViXFxuXFx0c29tZSBrLCB2IGluIF9wZl9zbnNmcF9wb2woc3ViKVxcblxcdGlzX2FycmF5KHYpXFxuXFx0Y291bnQodikgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBoYXMgYW4gYXJyYXkgaW5zaWRlIGl0cyBhcnJheTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc01hdGNoIHZhbHVlIG11c3QgYmUgU3RyaW5nLCBudW1iZXIsIHRydWUsIGZhbHNlLCBvciBudWxsXFxcXFxcXCJcXFwiLCBbaywgX3BmX3Nuc2ZwX2Vycl0pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRzb21lIGssIHYgaW4gX3BmX3Nuc2ZwX3BvbChzdWIpXFxuXFx0aXNfYXJyYXkodilcXG5cXHRzb21lIGUgaW4gdlxcblxcdGlzX2FycmF5KGUpXFxufVxcblxcbl9wZl9zbnNmcF9hdHRyX3Njb3BlKHN1YikgaWYgb2JqZWN0LmdldChzdWIsIFxcXCJGaWx0ZXJQb2xpY3lTY29wZVxcXCIsIFxcXCJNZXNzYWdlQXR0cmlidXRlc1xcXCIpID09IFxcXCJNZXNzYWdlQXR0cmlidXRlc1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBuZXN0cyBhbiBvYmplY3Qgd2hpbGUgRmlsdGVyUG9saWN5U2NvcGUgaXMgTWVzc2FnZUF0dHJpYnV0ZXM7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBGaWx0ZXIgcG9saWN5IHNjb3BlIE1lc3NhZ2VBdHRyaWJ1dGVzIGRvZXMgbm90IHN1cHBvcnQgbmVzdGVkIGZpbHRlciBwb2xpY3lcXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdF9wZl9zbnNmcF9hdHRyX3Njb3BlKHN1YilcXG5cXHRzb21lIGssIHYgaW4gX3BmX3Nuc2ZwX3BvbChzdWIpXFxuXFx0aXNfb2JqZWN0KHYpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpbHRlci1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkZpbHRlclBvbGljeVNjb3BlXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3lTY29wZSAnJXMnIGlzIG5vdCBNZXNzYWdlQXR0cmlidXRlcyBvciBNZXNzYWdlQm9keTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IEZpbHRlclBvbGljeVNjb3BlOiBJbnZhbGlkIHZhbHVlIFslc10uIFBsZWFzZSB1c2UgZWl0aGVyIE1lc3NhZ2VCb2R5IG9yIE1lc3NhZ2VBdHRyaWJ1dGVzXFxcXFxcXCJcXFwiLCBbcywgc10pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRzIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5U2NvcGVcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhzKVxcblxcdG5vdCBzIGluIHtcXFwiTWVzc2FnZUF0dHJpYnV0ZXNcXFwiLCBcXFwiTWVzc2FnZUJvZHlcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maXJlaG9zZS1zdWJzY3JpcHRpb24tcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpcmVob3NlIHN1YnNjcmlwdGlvbiByZXF1aXJlcyBTdWJzY3JpcHRpb25Sb2xlQXJuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfU3Vic2NyaWJlLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZoX2ZpeCA6PSBcXFwiU2V0IFN1YnNjcmlwdGlvblJvbGVBcm4gdG8gYSByb2xlIFNOUyBjYW4gYXNzdW1lIHRoYXQgbWF5IHdyaXRlIHRvIHRoZSBkZWxpdmVyeSBzdHJlYW1cXFwiXFxuXFxuX3BmX3Nuc2ZoX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2ZoX3N1YiBjb250YWlucyBbbmFtZSwgcGF0aCwgc3ViLCBuYW1lXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHNvbWUgcyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gcy52YWx1ZVxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvbi4lZFxcXCIsIFtzLmluZGV4XSlcXG59XFxuXFxuX3BmX3Nuc2ZoX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpcmVob3NlLXN1YnNjcmlwdGlvbi1yb2xlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdWJzY3JpcHRpb25Sb2xlQXJuXFxcIiwgW3BhdGhdKSxcXG5cXHRcXFwiUHJvdG9jb2wgZmlyZWhvc2UgaGFzIG5vIFN1YnNjcmlwdGlvblJvbGVBcm47IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IERlbGl2ZXJ5IHByb3RvY29sIGZpcmVob3NlIGNhbiBvbmx5IGJlIHN1YnNjcmliZWQgd2l0aCBzdWJzY3JpcHRpb24gcm9sZSBhcm5cXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nuc2ZoX2ZpeCwgX3BmX3Nuc2ZoX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZoX3N1YlxcblxcdF9wZl9zbnNmaF9wcm90byhuYW1lLCBwYXRoKSA9PSBcXFwiZmlyZWhvc2VcXFwiXFxuXFx0b2JqZWN0LmdldChzdWIsIFxcXCJTdWJzY3JpcHRpb25Sb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1yYXctbWVzc2FnZS1kZWxpdmVyeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSYXdNZXNzYWdlRGVsaXZlcnkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHNxcywgaHR0cCwgaHR0cHMgYW5kIGZpcmVob3NlIHN1YnNjcmlwdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc3Jhd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfU3Vic2NyaWJlLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3Jhd19maXggOj0gXFxcIkRyb3AgUmF3TWVzc2FnZURlbGl2ZXJ5IGZvciBlbWFpbCAvIGVtYWlsLWpzb24gLyBzbXMgLyBsYW1iZGEgLyBhcHBsaWNhdGlvbiBzdWJzY3JpcHRpb25zXFxcIlxcblxcbl9wZl9zbnNyYXdfc3ViIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllc1xcXCIsIHN1YiwgdG9waWNdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChzdWIpXFxuXFx0dG9waWMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY0FyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHRvcGljKVxcbn1cXG5cXG5fcGZfc25zcmF3X3N1YiBjb250YWlucyBbbmFtZSwgcGF0aCwgc3ViLCBuYW1lXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHNvbWUgcyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gcy52YWx1ZVxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvbi4lZFxcXCIsIFtzLmluZGV4XSlcXG59XFxuXFxuX3BmX3Nuc3Jhd19wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1yYXctbWVzc2FnZS1kZWxpdmVyeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmF3TWVzc2FnZURlbGl2ZXJ5XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJSYXdNZXNzYWdlRGVsaXZlcnkgaXMgdHJ1ZSBvbiBhICVzIHN1YnNjcmlwdGlvbjsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IERlbGl2ZXJ5IHByb3RvY29sIFslc10gZG9lcyBub3Qgc3VwcG9ydCByYXcgbWVzc2FnZSBkZWxpdmVyeS5cXFxcXFxcIlxcXCIsIFtwcm90bywgcHJvdG9dKSxcXG5cXHRfcGZfc25zcmF3X2ZpeCwgX3BmX3Nuc3Jhd191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNyYXdfc3ViXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5SYXdNZXNzYWdlRGVsaXZlcnlcXFwiLCBbcGF0aF0pKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcdHByb3RvIDo9IF9wZl9zbnNyYXdfcHJvdG8obmFtZSwgcGF0aClcXG5cXHRub3QgcHJvdG8gaW4ge1xcXCJzcXNcXFwiLCBcXFwiaHR0cFxcXCIsIFxcXCJodHRwc1xcXCIsIFxcXCJmaXJlaG9zZVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXN1YnNjcmlwdGlvbi1lbmRwb2ludFwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJzY3JpcHRpb24gUHJvdG9jb2wgaXMgb25lIG9mIHRoZSBuaW5lIFNOUyBwcm90b2NvbHMgYW5kIHRoZSBFbmRwb2ludCBtYXRjaGVzIGl0OiBhbiBBUk4gb2YgdGhlIHJpZ2h0IHNlcnZpY2UgZm9yIHNxcy9sYW1iZGEvZmlyZWhvc2UvYXBwbGljYXRpb24sIGFuIGVtYWlsIGFkZHJlc3MsIGEgVVJMIHdpdGggdGhlIHNhbWUgc2NoZW1lIGZvciBodHRwL2h0dHBzLCBhIHBob25lIG51bWJlciBmb3Igc21zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNlcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfU3Vic2NyaWJlLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2VwX2ZpeCA6PSBcXFwiR2l2ZSB0aGUgc3Vic2NyaXB0aW9uIHRoZSBlbmRwb2ludCBmb3JtIGl0cyBwcm90b2NvbCBleHBlY3RzIChGbjo6R2V0QXR0IFF1ZXVlLkFybiBmb3Igc3FzLCBodHRwczovLyBVUkwgZm9yIGh0dHBzLCAuLi4pXFxcIlxcblxcbl9wZl9zbnNlcF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNlcF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNlcF9wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG5fcGZfc25zZXBfcHJvdG9jb2xzIDo9IHtcXFwiaHR0cFxcXCIsIFxcXCJodHRwc1xcXCIsIFxcXCJlbWFpbFxcXCIsIFxcXCJlbWFpbC1qc29uXFxcIiwgXFxcInNtc1xcXCIsIFxcXCJzcXNcXFwiLCBcXFwiYXBwbGljYXRpb25cXFwiLCBcXFwibGFtYmRhXFxcIiwgXFxcImZpcmVob3NlXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tZW5kcG9pbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJQcm90b2NvbCAnJXMnIGlzIG5vdCBhbiBTTlMgcHJvdG9jb2w7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEFtYXpvbiBTTlMgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIHByb3RvY29sIHN0cmluZzogJXNcXFxcXFxcIlxcXCIsIFtwcm90bywgcHJvdG9dKSxcXG5cXHRfcGZfc25zZXBfZml4LCBfcGZfc25zZXBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZXBfc3ViXFxuXFx0cHJvdG8gOj0gX3BmX3Nuc2VwX3Byb3RvKG5hbWUsIHBhdGgpXFxuXFx0bm90IHByb3RvIGluIF9wZl9zbnNlcF9wcm90b2NvbHNcXG59XFxuXFxuIyBbcHJvdG9jb2wsIGVuZHBvaW50IHBhdHRlcm4sIHNlcnZpY2UgZXJyb3JdXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwic3FzXFxcIiwgXFxcIl5hcm46W146XSs6c3FzOlxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogU1FTIGVuZHBvaW50IEFSTlxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwibGFtYmRhXFxcIiwgXFxcIl5hcm46W146XSs6bGFtYmRhOlxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogTGFtYmRhIGVuZHBvaW50IEFSTlxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiZmlyZWhvc2VcXFwiLCBcXFwiXmFybjpbXjpdKzpmaXJlaG9zZTpcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEZpcmVob3NlIGVuZHBvaW50IEFSTlxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiYXBwbGljYXRpb25cXFwiLCBcXFwiXmFybjpbXjpdKzpzbnM6W146XSo6W146XSo6ZW5kcG9pbnQvXFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBcHBsaWNhdGlvbiBlbmRwb2ludCBhcm4gaW52YWxpZFxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiZW1haWxcXFwiLCBcXFwiXlteQCBdK0BbXkAgXSskXFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBFbWFpbCBhZGRyZXNzXFxcIl1cXG5cXG5fcGZfc25zZXBfc2hhcGUgY29udGFpbnMgW1xcXCJlbWFpbC1qc29uXFxcIiwgXFxcIl5bXkAgXStAW15AIF0rJFxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW1haWwgYWRkcmVzc1xcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiaHR0cFxcXCIsIFxcXCJeaHR0cDovL1xcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW5kcG9pbnQgbXVzdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHByb3RvY29sXFxcIl1cXG5cXG5fcGZfc25zZXBfc2hhcGUgY29udGFpbnMgW1xcXCJodHRwc1xcXCIsIFxcXCJeaHR0cHM6Ly9cXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEVuZHBvaW50IG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBwcm90b2NvbFxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwic21zXFxcIiwgXFxcIl5bK10/WzAtOV1bMC05IC1dKiRcXFwiLCBcXFwiSW52YWxpZCBTTVMgZW5kcG9pbnRcXFwiXVxcblxcbiMgT25seSBsaXRlcmFsIGVuZHBvaW50cyBhcmUganVkZ2VkOiBhIFJlZiAvIEZuOjpHZXRBdHQgdG8gYSByZXNvdXJjZSBpbiB0aGVcXG4jIHRlbXBsYXRlIHJlc29sdmVzIHRvIHRoYXQgcmVzb3VyY2UncyBsb2dpY2FsIElEIGFuZCBpcyBza2lwcGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1lbmRwb2ludFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIkVuZHBvaW50ICclcycgZG9lcyBub3QgaGF2ZSB0aGUgZm9ybSB0aGUgJXMgcHJvdG9jb2wgZXhwZWN0czsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc1xcXFxcXFwiXFxcIiwgW2VwLCBwcm90bywgZXJyXSksXFxuXFx0X3BmX3Nuc2VwX2ZpeCwgX3BmX3Nuc2VwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2VwX3N1YlxcblxcdHByb3RvIDo9IF9wZl9zbnNlcF9wcm90byhuYW1lLCBwYXRoKVxcblxcdHNvbWUgW3AyLCBwYXR0ZXJuLCBlcnJdIGluIF9wZl9zbnNlcF9zaGFwZVxcblxcdHAyID09IHByb3RvXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5FbmRwb2ludFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKGVwKVxcblxcdG5vdCBlcCBpbiBvYmplY3Qua2V5cyhpbnB1dC5yZXNvdXJjZXMpXFxuXFx0bm90IGNvbnRhaW5zKGVwLCBcXFwiJHtcXFwiKVxcblxcdG5vdCByZWdleC5tYXRjaChwYXR0ZXJuLCBlcClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZHJpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3Vic2NyaXB0aW9uIFJlZHJpdmVQb2xpY3kgbmVlZHMgZGVhZExldHRlclRhcmdldEFybiwgd2hpY2ggbXVzdCBiZSBhbiBTUVMgcXVldWUgQVJOIGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNzcmRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtZGVhZC1sZXR0ZXItcXVldWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3NyZF9maXggOj0gXFxcIlNldCBkZWFkTGV0dGVyVGFyZ2V0QXJuIHRvIEZuOjpHZXRBdHQgUXVldWUuQXJuIG9mIGEgcXVldWUgaW4gdGhpcyBzdGFja1xcXCJcXG5cXG5fcGZfc25zc3JkX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc3NyZF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNzcmRfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuX3BmX3Nuc3NyZF9wb2woc3ViKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KHN1YiwgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNzcmRfcG9sKHN1YikgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChzdWIsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZHJpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJlZHJpdmVQb2xpY3lcXFwiLCBbcGF0aF0pLFxcblxcdFxcXCJSZWRyaXZlUG9saWN5IGhhcyBubyBkZWFkTGV0dGVyVGFyZ2V0QXJuOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogUmVkcml2ZVBvbGljeTogTWlzc2luZyBkZWFkTGV0dGVyVGFyZ2V0QXJuIGF0dHJpYnV0ZVxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc25zc3JkX2ZpeCwgX3BmX3Nuc3NyZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNzcmRfc3ViXFxuXFx0cG9sIDo9IF9wZl9zbnNzcmRfcG9sKHN1YilcXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gJyVzJyBpcyBub3QgYW4gU1FTIHF1ZXVlIEFSTjsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFJlZHJpdmVQb2xpY3k6IGRlYWRMZXR0ZXJUYXJnZXRBcm4gbXVzdCBiZSBhIFNRUyBxdWV1ZVxcXFxcXFwiXFxcIiwgW2Fybl0pLFxcblxcdF9wZl9zbnNzcmRfZml4LCBfcGZfc25zc3JkX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc3NyZF9zdWJcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChfcGZfc25zc3JkX3BvbChzdWIpLCBcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRub3QgY29udGFpbnMoYXJuLCBcXFwiJHtcXFwiKVxcblxcdG5vdCByZWdleC5tYXRjaChcXFwiXmFybjpbXjpdKzpzcXM6XFxcIiwgYXJuKVxcbn1cXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uIChlbmZvcmNlIG1vZGUgb25seTsgc2VlIEFHRU5UUy5tZCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZHJpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiZGVhZExldHRlclRhcmdldEFybiBpcyBpbiAnJXMnIGJ1dCB0aGUgc3Vic2NyaXB0aW9uIGRlcGxveXMgdG8gJyVzJzsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFJlZHJpdmVQb2xpY3k6IGRlYWRMZXR0ZXJUYXJnZXRBcm4gbXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIHN1YnNjcmlwdGlvblxcXFxcXFwiXFxcIiwgW3BhcnRzWzNdLCByZWdpb25dKSxcXG5cXHRfcGZfc25zc3JkX2ZpeCwgX3BmX3Nuc3NyZF91cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNzcmRfc3ViXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoX3BmX3Nuc3NyZF9wb2woc3ViKSwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1syXSA9PSBcXFwic3FzXFxcIlxcblxcdHBhcnRzWzNdICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1zdWJzY3JpcHRpb24tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN1YnNjcmlwdGlvbi5SZWdpb24gbXVzdCBiZSB0aGUgdG9waWMncyByZWdpb24gKHRoZSByZWdpb24gaW4gYSBsaXRlcmFsIFRvcGljQXJuLCBvciB0aGUgZGVwbG95IHJlZ2lvbiBmb3IgYSB0b3BpYyBpbiB0aGlzIHRlbXBsYXRlKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNzcmdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zbnMtc3Vic2NyaXB0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3NyZ19maXggOj0gXFxcIlNldCBSZWdpb24gdG8gdGhlIHRvcGljJ3Mgb3duIHJlZ2lvbiwgb3IgZHJvcCBpdCBmb3IgYSB0b3BpYyBpbiB0aGlzIHN0YWNrXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZ2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmVnaW9uICclcycgZGlmZmVycyBmcm9tIHRoZSB0b3BpYydzIHJlZ2lvbiAnJXMnIGluIFRvcGljQXJuOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuXFxcXFxcXCJcXFwiLCBbcmVnLCBwYXJ0c1szXV0pLFxcblxcdF9wZl9zbnNzcmdfZml4LCBfcGZfc25zc3JnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0cmVnIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVnaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocmVnKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY0FyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQodCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbM10gIT0gcmVnXFxufVxcblxcbiMgQSB0b3BpYyBjcmVhdGVkIGluIHRoaXMgdGVtcGxhdGUgbGl2ZXMgaW4gdGhlIGRlcGxveSByZWdpb24gKGVuZm9yY2UgbW9kZSBvbmx5OyBzZWUgQUdFTlRTLm1kKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWdpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZ2lvbiAnJXMnIGRpZmZlcnMgZnJvbSB0aGUgZGVwbG95IHJlZ2lvbiAnJXMnIG9mIHRoZSB0b3BpYyBpbiB0aGlzIHRlbXBsYXRlOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuXFxcXFxcXCJcXFwiLCBbcmVnLCByZWdpb25dKSxcXG5cXHRfcGZfc25zc3JnX2ZpeCwgX3BmX3Nuc3NyZ191cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHJlZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlZ2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlZylcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cmVnICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRvcGljIERpc3BsYXlOYW1lIGlzIGF0IG1vc3QgMTAwIGNoYXJhY3RlcnMsIFNpZ25hdHVyZVZlcnNpb24gaXMgMSBvciAyLCBhbmQgVHJhY2luZ0NvbmZpZyBpcyBQYXNzVGhyb3VnaCBvciBBY3RpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnN0YXZfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zbnMtdG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zdGF2X2ZpeCA6PSBcXFwiU2hvcnRlbiBEaXNwbGF5TmFtZSB0byAxMDAgY2hhcmFjdGVyczsgdXNlIFNpZ25hdHVyZVZlcnNpb24gXFxcXFxcXCIxXFxcXFxcXCIvXFxcXFxcXCIyXFxcXFxcXCIgYW5kIFRyYWNpbmdDb25maWcgUGFzc1Rocm91Z2gvQWN0aXZlXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXRvcGljLWF0dHJpYnV0ZS12YWx1ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3BsYXlOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEaXNwbGF5TmFtZSBpcyAlZCBjaGFyYWN0ZXJzIGxvbmcgKG1heGltdW0gMTAwKTsgQ3JlYXRlVG9waWMgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogRGlzcGxheU5hbWVcXFxcXFxcIlxcXCIsIFtjb3VudCh2KV0pLFxcblxcdF9wZl9zbnN0YXZfZml4LCBfcGZfc25zdGF2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzcGxheU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdGNvdW50KHYpID4gMTAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXRvcGljLWF0dHJpYnV0ZS12YWx1ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNpZ25hdHVyZVZlcnNpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlNpZ25hdHVyZVZlcnNpb24gJyV2JyBpcyBub3QgMSBvciAyOyBDcmVhdGVUb3BpYyBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBTaWduYXR1cmVWZXJzaW9uOiBJbnZhbGlkIHZhbHVlLiBNdXN0IGJlIDEgb3IgMi5cXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0X3BmX3Nuc3Rhdl9maXgsIF9wZl9zbnN0YXZfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaWduYXR1cmVWZXJzaW9uXFxcIilcXG5cXHRfcGZfc25zdGF2X3NjYWxhcih2KVxcblxcdG5vdCBzcHJpbnRmKFxcXCIldlxcXCIsIFt2XSkgaW4ge1xcXCIxXFxcIiwgXFxcIjJcXFwifVxcbn1cXG5cXG5fcGZfc25zdGF2X3NjYWxhcih2KSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfc25zdGF2X3NjYWxhcih2KSBpZiBpc19udW1iZXIodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UcmFjaW5nQ29uZmlnXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUcmFjaW5nQ29uZmlnICclcycgaXMgbm90IFBhc3NUaHJvdWdoIG9yIEFjdGl2ZTsgQ3JlYXRlVG9waWMgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogSW52YWxpZCB0cmFjaW5nIGNvbmZpZyB2YWx1ZTogJXNcXFxcXFxcIlxcXCIsIFt2LCB2XSksXFxuXFx0X3BmX3Nuc3Rhdl9maXgsIF9wZl9zbnN0YXZfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UcmFjaW5nQ29uZmlnXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgdiBpbiB7XFxcIlBhc3NUaHJvdWdoXFxcIiwgXFxcIkFjdGl2ZVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXRvcGljLW5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRvcGljIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChwbHVzIGEgLmZpZm8gc3VmZml4KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU2fSRgLCBuKVxcblxcbl9wZl9zbnNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDI1MX1cXFxcLmZpZm8kYCwgbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljIE5hbWVcXFxcXFxcIjogU05TIGFjY2VwdHMgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKGEgRklGTyB0b3BpYyBhZGRzIHRoZSAuZmlmbyBzdWZmaXgpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0b3BpYyB1c2luZyBbYS16QS1aMC05Xy1dIChhcHBlbmQgLmZpZm8gb25seSBmb3IgRklGTyB0b3BpY3MpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVUb3BpYy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgX3BmX3Nuc25hbWVfb2sobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtdG9waWMtcG9saWN5LXRvcGljc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb3BpY1BvbGljeS5Ub3BpY3MgdGFrZXMgdG9waWMgQVJOcyAoUmVmIFRvcGljKSwgbm90IHRvcGljIG5hbWVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zdHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zbnMtdG9waWNwb2xpY3kuaHRtbFxcXCJcXG5cXG5fcGZfc25zdHBfZml4IDo9IFxcXCJMaXN0IHRvcGljcyB3aXRoIFJlZiAodGhlIEFSTiksIG5vdCBGbjo6R2V0QXR0IFRvcGljLlRvcGljTmFtZSBvciBhIGJhcmUgbmFtZVxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1wb2xpY3ktdG9waWNzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRvcGljcy4lZFxcXCIsIFtpXSksXFxuXFx0XFxcIlRvcGljcyBlbnRyeSBpcyB0aGUgdG9waWMgbmFtZSAoRm46OkdldEF0dCBUb3BpYy5Ub3BpY05hbWUpIGJ1dCBUb3BpY1BvbGljeSBleHBlY3RzIHRoZSB0b3BpYyBBUk47IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogVG9waWNBcm4gUmVhc29uOiBBbiBBUk4gbXVzdCBoYXZlIGF0IGxlYXN0IDYgZWxlbWVudHMsIG5vdCAxXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zbnN0cF9maXgsIF9wZl9zbnN0cF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1BvbGljeVxcXCIpXFxuXFx0dHMgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlRvcGljc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkodHMpXFxuXFx0c29tZSBpLCB0IGluIHRzXFxuXFx0aXNfb2JqZWN0KHQpXFxuXFx0b2JqZWN0LmdldCh0LCBcXFwiX19raW5kXFxcIiwgbnVsbCkgPT0gXFxcImdldGF0dDpUb3BpY05hbWVcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXRvcGljLXBvbGljeS10b3BpY3NcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVG9waWNzLiVkXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY3MgZW50cnkgJyVzJyBpcyBub3QgYW4gQVJOOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuIFJlYXNvbjogQW4gQVJOIG11c3QgaGF2ZSBhdCBsZWFzdCA2IGVsZW1lbnRzXFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdF9wZl9zbnN0cF9maXgsIF9wZl9zbnN0cF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1BvbGljeVxcXCIpXFxuXFx0dHMgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlRvcGljc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkodHMpXFxuXFx0c29tZSBpLCB0IGluIHRzXFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0bm90IHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdG5vdCBjb250YWlucyh0LCBcXFwiJHtcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1kbHEtc2FtZS10eXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3FzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZGVhZC1sZXR0ZXIgcXVldWUgbmFtZWQgYnkgYSBsaXRlcmFsIEFSTiBtdXN0IGJlIHRoZSBzYW1lIHR5cGUgYXMgaXRzIHNvdXJjZSAoRklGTyBmb3IgRklGTywgc3RhbmRhcmQgZm9yIHN0YW5kYXJkKTsgRm46OkdldEF0dCB3aXJpbmcgaXMgY292ZXJlZCBieSBlbmdpbmUgcnVsZSBFMzUwMlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc2RscV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzZGxxX2ZpeCA6PSBcXFwiUG9pbnQgYSBGSUZPIHF1ZXVlIGF0IGEgRklGTyBkZWFkLWxldHRlciBxdWV1ZSAoKi5maWZvKSBhbmQgYSBzdGFuZGFyZCBxdWV1ZSBhdCBhIHN0YW5kYXJkIG9uZVxcXCJcXG5cXG5fcGZfc3FzZGxxX2ZpZm8ocSkgaWYgcmVzb2x2ZShxLCBcXFwiUHJvcGVydGllcy5GaWZvUXVldWVcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcbiMgU3RhbmRhcmQgcXVldWU6IEZpZm9RdWV1ZSBhYnNlbnQgb3IgbGl0ZXJhbGx5IGZhbHNlIChhbiB1bnJlc29sdmFibGUgdmFsdWUgaXMgbmVpdGhlcikuXFxuX3BmX3Nxc2RscV9zdGQocSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1txXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvUXVldWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zcXNkbHFfc3RkKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcblxcbiMgUmVkcml2ZVBvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNkbHFfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzZGxxX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzNTAyIChDRk5fTElOVCkgYWxyZWFkeSBjb21wYXJlcyB0aGUgdHlwZXMgd2hlblxcbiMgZGVhZExldHRlclRhcmdldEFybiBpcyBGbjo6R2V0QXR0IG9mIGEgcXVldWUgaW4gdGhlIHRlbXBsYXRlICh2ZXJpZmllZFxcbiMgYWdhaW5zdCAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDUpLiBPbmx5IGEgbGl0ZXJhbCBBUk4g4oCUIGFuIGltcG9ydGVkIHF1ZXVlIOKAlFxcbiMgZXNjYXBlcyBpdCwgYW5kIHRoZSAuZmlmbyBzdWZmaXggdGVsbHMgdGhlIHR5cGUuXFxuX3BmX3Nxc2RscV9saXRlcmFsKG5hbWUpIDo9IGFybiBpZiB7XFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoX3BmX3Nxc2RscV9wb2wobmFtZSksIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHJlZ2V4Lm1hdGNoKFxcXCJeYXJuOlteOl0rOnNxczpcXFwiLCBhcm4pXFxuXFx0bm90IGNvbnRhaW5zKGFybiwgXFxcIiR7XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZGxxLXNhbWUtdHlwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZVBvbGljeS5kZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJhIEZJRk8gcXVldWUgcG9pbnRzIGF0IHRoZSBzdGFuZGFyZCBkZWFkLWxldHRlciBxdWV1ZSAnJXMnOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVhZC1sZXR0ZXIgcXVldWUgbXVzdCBiZSBzYW1lIHR5cGUgb2YgcXVldWUgYXMgdGhlIHNvdXJjZS5cXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc3FzZGxxX2ZpeCwgX3BmX3Nxc2RscV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0X3BmX3Nxc2RscV9maWZvKG5hbWUpXFxuXFx0YXJuIDo9IF9wZl9zcXNkbHFfbGl0ZXJhbChuYW1lKVxcblxcdG5vdCBlbmRzd2l0aChhcm4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLWRscS1zYW1lLXR5cGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiYSBzdGFuZGFyZCBxdWV1ZSBwb2ludHMgYXQgdGhlIEZJRk8gZGVhZC1sZXR0ZXIgcXVldWUgJyVzJzsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkRlYWQtbGV0dGVyIHF1ZXVlIG11c3QgYmUgc2FtZSB0eXBlIG9mIHF1ZXVlIGFzIHRoZSBzb3VyY2UuXFxcXFxcXCJcXFwiLCBbYXJuXSksXFxuXFx0X3BmX3Nxc2RscV9maXgsIF9wZl9zcXNkbHFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdF9wZl9zcXNkbHFfc3RkKG5hbWUpXFxuXFx0YXJuIDo9IF9wZl9zcXNkbHFfbGl0ZXJhbChuYW1lKVxcblxcdGVuZHN3aXRoKGFybiwgXFxcIi5maWZvXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtZmlmby1uYW1lLXN1ZmZpeFwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFF1ZXVlTmFtZSBlbmRpbmcgaW4gLmZpZm8gcmVxdWlyZXMgRmlmb1F1ZXVlOiB0cnVlIChhIEZJRk8gcXVldWUgd2l0aG91dCB0aGUgc3VmZml4IGlzIGVuZ2luZSBydWxlIEUyNTA0KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc3NmeF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3Fzc2Z4X2ZpeCA6PSBcXFwiU2V0IEZpZm9RdWV1ZTogdHJ1ZSBvciBkcm9wIHRoZSAuZmlmbyBzdWZmaXhcXFwiXFxuXFxuX3BmX3Nxc3NmeF9maWZvKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIFN0YW5kYXJkIHF1ZXVlOiBGaWZvUXVldWUgYWJzZW50IG9yIGxpdGVyYWxseSBmYWxzZSAoYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGlzIG5laXRoZXIpLlxcbl9wZl9zcXNzZnhfc3RkKHEpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbcV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlmb1F1ZXVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc3Fzc2Z4X3N0ZChxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG4jIFRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gKEZpZm9RdWV1ZSB0cnVlLCBuYW1lIHdpdGhvdXQgLmZpZm8pIGlzIHRoZSBlbmdpbmUnc1xcbiMgRTI1MDQgLyBFMzUwMTsgdmVyaWZpZWQgYWdhaW5zdCAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZmlmby1uYW1lLXN1ZmZpeFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUXVldWVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJRdWV1ZU5hbWUgJyVzJyBlbmRzIHdpdGggLmZpZm8gYnV0IHRoZSBxdWV1ZSBpcyBzdGFuZGFyZCAoRmlmb1F1ZXVlIGlzIG5vdCB0cnVlKTsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkNhbiBvbmx5IGluY2x1ZGUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIG9yIHVuZGVyc2NvcmVzLiAxIHRvIDgwIGluIGxlbmd0aFxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRfcGZfc3Fzc2Z4X2ZpeCwgX3BmX3Nxc3NmeF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0ZW5kc3dpdGgobiwgXFxcIi5maWZvXFxcIilcXG5cXHRfcGZfc3Fzc2Z4X3N0ZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1maWZvLW9ubHktYXR0cmlidXRlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLCBEZWR1cGxpY2F0aW9uU2NvcGUgYW5kIEZpZm9UaHJvdWdocHV0TGltaXQgYXJlIEZJRk8tb25seSBxdWV1ZSBhdHRyaWJ1dGVzIChhbmQgdGhlIHR3byBlbnVtcyBhcmUgbWVzc2FnZUdyb3VwfHF1ZXVlIGFuZCBwZXJRdWV1ZXxwZXJNZXNzYWdlR3JvdXBJZClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNmb191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzZm9fZml4IDo9IFxcXCJTZXQgRmlmb1F1ZXVlOiB0cnVlIChhbmQgbmFtZSB0aGUgcXVldWUgKi5maWZvKSBvciBkcm9wIHRoZSBGSUZPLW9ubHkgYXR0cmlidXRlc1xcXCJcXG5cXG5fcGZfc3FzZm9fZmlmbyhxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBTdGFuZGFyZCBxdWV1ZTogRmlmb1F1ZXVlIGFic2VudCBvciBsaXRlcmFsbHkgZmFsc2UgKGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBpcyBuZWl0aGVyKS5cXG5fcGZfc3FzZm9fc3RkKHEpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbcV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlmb1F1ZXVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc3FzZm9fc3RkKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcblxcbl9wZl9zcXNmb19tc2cgOj0ge1xcblxcdFxcXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uXFxcIjogXFxcIlVua25vd24gQXR0cmlidXRlIENvbnRlbnRCYXNlZERlZHVwbGljYXRpb24uXFxcIixcXG5cXHRcXFwiRGVkdXBsaWNhdGlvblNjb3BlXFxcIjogXFxcIllvdSBjYW4gc3BlY2lmeSB0aGUgRGVkdXBsaWNhdGlvblNjb3BlIG9ubHkgd2hlbiBGaWZvUXVldWUgaXMgc2V0IHRvIHRydWUuXFxcIixcXG5cXHRcXFwiRmlmb1Rocm91Z2hwdXRMaW1pdFxcXCI6IFxcXCJZb3UgY2FuIHNwZWNpZnkgdGhlIEZpZm9UaHJvdWdocHV0TGltaXQgb25seSB3aGVuIEZpZm9RdWV1ZSBpcyBzZXQgdG8gdHJ1ZS5cXFwiLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1maWZvLW9ubHktYXR0cmlidXRlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgc2V0IG9uIGEgc3RhbmRhcmQgcXVldWUgKEZpZm9RdWV1ZSBpcyBub3QgdHJ1ZSk7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCIlc1xcXFxcXFwiXFxcIiwgW2F0dHIsIF9wZl9zcXNmb19tc2dbYXR0cl1dKSxcXG5cXHRfcGZfc3FzZm9fZml4LCBfcGZfc3FzZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdF9wZl9zcXNmb19zdGQobmFtZSlcXG5cXHRzb21lIGF0dHIsIF8gaW4gX3BmX3Nxc2ZvX21zZ1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGF0dHIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc2ZvX2VudW0gY29udGFpbnMgW1xcXCJEZWR1cGxpY2F0aW9uU2NvcGVcXFwiLCB7XFxcIm1lc3NhZ2VHcm91cFxcXCIsIFxcXCJxdWV1ZVxcXCJ9XVxcblxcbl9wZl9zcXNmb19lbnVtIGNvbnRhaW5zIFtcXFwiRmlmb1Rocm91Z2hwdXRMaW1pdFxcXCIsIHtcXFwicGVyUXVldWVcXFwiLCBcXFwicGVyTWVzc2FnZUdyb3VwSWRcXFwifV1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1maWZvLW9ubHktYXR0cmlidXRlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJyVzJyBpcyBub3Qgb25lIG9mICV2OyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciAlcy4gUmVhc29uOiBub3QgYSBzdXBwb3J0ZWQgdmFsdWUuXFxcXFxcXCJcXFwiLCBbYXR0ciwgdiwgYWxsb3dlZCwgYXR0cl0pLFxcblxcdF9wZl9zcXNmb19maXgsIF9wZl9zcXNmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0c29tZSBbYXR0ciwgYWxsb3dlZF0gaW4gX3BmX3Nxc2ZvX2VudW1cXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSkpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHYgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1oaWdoLXRocm91Z2hwdXQtcGFpcmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGaWZvVGhyb3VnaHB1dExpbWl0IHBlck1lc3NhZ2VHcm91cElkIHJlcXVpcmVzIERlZHVwbGljYXRpb25TY29wZSBtZXNzYWdlR3JvdXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNodF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L1NRU0RldmVsb3Blckd1aWRlL2hpZ2gtdGhyb3VnaHB1dC1maWZvLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc2h0X2ZpeCA6PSBcXFwiU2V0IERlZHVwbGljYXRpb25TY29wZTogbWVzc2FnZUdyb3VwIHRvZ2V0aGVyIHdpdGggRmlmb1Rocm91Z2hwdXRMaW1pdDogcGVyTWVzc2FnZUdyb3VwSWQgKGJvdGggYXJlIG5lZWRlZCBmb3IgaGlnaCB0aHJvdWdocHV0KVxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1oaWdoLXRocm91Z2hwdXQtcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmlmb1Rocm91Z2hwdXRMaW1pdFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRmlmb1Rocm91Z2hwdXRMaW1pdCBpcyBwZXJNZXNzYWdlR3JvdXBJZCBidXQgRGVkdXBsaWNhdGlvblNjb3BlIGlzICVzOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBGaWZvVGhyb3VnaHB1dExpbWl0LiBSZWFzb246IFRvIHNldCBGaWZvVGhyb3VnaHB1dExpbWl0IHRvIHBlck1lc3NhZ2VHcm91cElkLCB0aGUgRGVkdXBsaWNhdGlvblNjb3BlIG11c3QgYmUgbWVzc2FnZUdyb3VwLlxcXFxcXFwiXFxcIiwgW3Nob3duXSksXFxuXFx0X3BmX3Nxc2h0X2ZpeCwgX3BmX3Nxc2h0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9UaHJvdWdocHV0TGltaXRcXFwiKSA9PSBcXFwicGVyTWVzc2FnZUdyb3VwSWRcXFwiXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0c2NvcGUgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkRlZHVwbGljYXRpb25TY29wZVxcXCIsIG51bGwpXFxuXFx0X3BmX3Nxc2h0X2JhZChzY29wZSlcXG5cXHRzaG93biA6PSBfcGZfc3FzaHRfc2hvdyhzY29wZSlcXG59XFxuXFxuX3BmX3Nxc2h0X2JhZChzY29wZSkgaWYgc2NvcGUgPT0gbnVsbFxcblxcbl9wZl9zcXNodF9iYWQoc2NvcGUpIGlmIHtcXG5cXHRpc19zdHJpbmcoc2NvcGUpXFxuXFx0c2NvcGUgIT0gXFxcIm1lc3NhZ2VHcm91cFxcXCJcXG59XFxuXFxuX3BmX3Nxc2h0X3Nob3coc2NvcGUpIDo9IFxcXCJhYnNlbnRcXFwiIGlmIHNjb3BlID09IG51bGxcXG5cXG5fcGZfc3FzaHRfc2hvdyhzY29wZSkgOj0gc3ByaW50ZihcXFwiJyVzJ1xcXCIsIFtzY29wZV0pIGlmIGlzX3N0cmluZyhzY29wZSlcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1xdWV1ZS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJRdWV1ZSBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDgwLCBwbHVzIGEgLmZpZm8gc3VmZml4KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsODB9JGAsIG4pXFxuXFxuX3BmX3Nxc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsNzV9XFxcXC5maWZvJGAsIG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUXVldWVOYW1lICclcycgaXMgcmVqZWN0ZWQ6IFNRUyBhY2NlcHRzIDEtODAgY2hhcmFjdGVycyBvZiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKGEgRklGTyBxdWV1ZSBhZGRzIHRoZSAuZmlmbyBzdWZmaXgpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBxdWV1ZSB1c2luZyBbYS16QS1aMC05Xy1dIHdpdGhpbiA4MCBjaGFyYWN0ZXJzIChhcHBlbmQgLmZpZm8gb25seSBmb3IgRklGTyBxdWV1ZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU1NpbXBsZVF1ZXVlU2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVRdWV1ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUXVldWVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgX3BmX3Nxc25hbWVfb2sobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJRdWV1ZVBvbGljeS5RdWV1ZXMgdGFrZXMgcXVldWUgVVJMcyAoUmVmIFF1ZXVlKSwgbmV2ZXIgQVJOcyAoRm46OkdldEF0dCBRdWV1ZS5Bcm4pLCBhbmQgbXVzdCBub3QgYmUgZW1wdHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNxcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXNxcy1xdWV1ZXBvbGljeS5odG1sXFxcIlxcblxcbl9wZl9zcXNxcF9maXggOj0gXFxcIkxpc3QgdGhlIHF1ZXVlcyB3aXRoIFJlZiAodGhlIHF1ZXVlIFVSTCksIG5vdCBGbjo6R2V0QXR0IFF1ZXVlLkFyblxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1xdWV1ZS1wb2xpY3ktcXVldWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5RdWV1ZXNcXFwiLFxcblxcdFxcXCJRdWV1ZXMgaXMgZW1wdHk7IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJRdWV1ZXMgYXJlIHJlcXVpcmVkXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zcXNxcF9maXgsIF9wZl9zcXNxcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVBvbGljeVxcXCIpXFxuXFx0cXMgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlF1ZXVlc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkocXMpXFxuXFx0Y291bnQocXMpID09IDBcXG59XFxuXFxuIyBGbjo6R2V0QXR0IGFwcGVhcnMgaW4gdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCBhcyBhIG1hcmtlciBvYmplY3Qgd2hvc2VcXG4jIF9fa2luZCBuYW1lcyB0aGUgYXR0cmlidXRlOyBSZWYgKHRoZSBVUkwpIGlzIFxcXCJyZXNvdXJjZVxcXCIuIExpdGVyYWwgQVJOcyBhcmVcXG4jIHN0cmluZ3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5RdWV1ZXMuJWRcXFwiLCBbaV0pLFxcblxcdFxcXCJRdWV1ZXMgZW50cnkgaXMgdGhlIHF1ZXVlIEFSTiAoRm46OkdldEF0dCBRdWV1ZS5Bcm4pIGJ1dCBRdWV1ZVBvbGljeSBleHBlY3RzIHRoZSBxdWV1ZSBVUkw7IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgYWRkcmVzcyBhcm46YXdzOnNxczouLi4gaXMgbm90IHZhbGlkIGZvciB0aGlzIGVuZHBvaW50LlxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc3FzcXBfZml4LCBfcGZfc3FzcXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcXFwiKVxcblxcdHFzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJRdWV1ZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHFzKVxcblxcdHNvbWUgaSwgcSBpbiBxc1xcblxcdGlzX29iamVjdChxKVxcblxcdG9iamVjdC5nZXQocSwgXFxcIl9fa2luZFxcXCIsIG51bGwpID09IFxcXCJnZXRhdHQ6QXJuXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1xdWV1ZS1wb2xpY3ktcXVldWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlF1ZXVlcy4lZFxcXCIsIFtpXSksXFxuXFx0c3ByaW50ZihcXFwiUXVldWVzIGVudHJ5ICclcycgaXMgYW4gQVJOIGJ1dCBRdWV1ZVBvbGljeSBleHBlY3RzIHRoZSBxdWV1ZSBVUkwgKGh0dHBzOi8vc3FzLjxyZWdpb24+LmFtYXpvbmF3cy5jb20vPGFjY291bnQ+LzxuYW1lPik7IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgYWRkcmVzcyAuLi4gaXMgbm90IHZhbGlkIGZvciB0aGlzIGVuZHBvaW50LlxcXFxcXFwiXFxcIiwgW3FdKSxcXG5cXHRfcGZfc3FzcXBfZml4LCBfcGZfc3FzcXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcXFwiKVxcblxcdHFzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJRdWV1ZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHFzKVxcblxcdHNvbWUgaSwgcSBpbiBxc1xcblxcdGlzX3N0cmluZyhxKVxcblxcdHN0YXJ0c3dpdGgocSwgXFxcImFybjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZWRyaXZlQWxsb3dQb2xpY3k6IHJlZHJpdmVQZXJtaXNzaW9uIGlzIHJlcXVpcmVkIChhbGxvd0FsbHxkZW55QWxsfGJ5UXVldWUpOyBieVF1ZXVlIG5lZWRzIDEuLjEwIHNvdXJjZVF1ZXVlQXJucyBhbmQgdGhlIG90aGVyIHR3byBmb3JiaWQgdGhlbVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc3JhcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcmFwX2ZpeCA6PSBcXFwiVXNlIGJ5UXVldWUgd2l0aCAxLTEwIHNvdXJjZVF1ZXVlQXJucywgb3IgYWxsb3dBbGwgLyBkZW55QWxsIHdpdGhvdXQgc291cmNlUXVldWVBcm5zXFxcIlxcblxcbiMgUmVkcml2ZUFsbG93UG9saWN5IGFycml2ZXMgYXMgYSBKU09OIG9iamVjdCBvciBhcyBhIEpTT04gc3RyaW5nIChib3RoIGFyZSB2YWxpZCBDbG91ZEZvcm1hdGlvbikuXFxuX3BmX3Nxc3JhcF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVBbGxvd1BvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JhcF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVBbGxvd1BvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNyYXBfbXNnIDo9IFxcXCJBbWF6b24gU1FTIGNhbid0IGNyZWF0ZSB0aGUgcmVkcml2ZSBhbGxvdyBwb2xpY3lcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hbGxvdy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVBbGxvd1BvbGljeS5yZWRyaXZlUGVybWlzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmVkcml2ZUFsbG93UG9saWN5IGhhcyBubyByZWRyaXZlUGVybWlzc2lvbjsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLCBhcyBpdCdzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdC5cXFxcXFxcIlxcXCIsIFtfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JhcF9wb2wobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZUFsbG93UG9saWN5LnJlZHJpdmVQZXJtaXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJyZWRyaXZlUGVybWlzc2lvbiAnJXMnIGlzIG5vdCBhbGxvd0FsbCwgZGVueUFsbCBvciBieVF1ZXVlOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMsIGFzIGl0J3MgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0LlxcXFxcXFwiXFxcIiwgW3Blcm0sIF9wZl9zcXNyYXBfbXNnXSksXFxuXFx0X3BmX3Nxc3JhcF9maXgsIF9wZl9zcXNyYXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHBlcm0gOj0gb2JqZWN0LmdldChfcGZfc3FzcmFwX3BvbChuYW1lKSwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocGVybSlcXG5cXHRub3QgcGVybSBpbiB7XFxcImFsbG93QWxsXFxcIiwgXFxcImRlbnlBbGxcXFwiLCBcXFwiYnlRdWV1ZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYWxsb3ctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVBcm5zXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJyZWRyaXZlUGVybWlzc2lvbiBieVF1ZXVlIGhhcyAlZCBzb3VyY2VRdWV1ZUFybnMgKDEgdG8gMTAgcmVxdWlyZWQpOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMuIFdoZW4geW91IHNwZWNpZnkgdGhlIGJ5UXVldWUgcGVybWlzc2lvbiB0eXBlLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYmV0d2VlbiAxIGFuZCAxMCBzb3VyY2UgcXVldWUgQVJOcy5cXFxcXFxcIlxcXCIsIFtuLCBfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JhcF9wb2wobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgbnVsbCkgPT0gXFxcImJ5UXVldWVcXFwiXFxuXFx0biA6PSBfcGZfc3FzcmFwX2NvdW50KG9iamVjdC5nZXQocG9sLCBcXFwic291cmNlUXVldWVBcm5zXFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nxc3JhcF9vdXQobilcXG59XFxuXFxuX3BmX3Nxc3JhcF9jb3VudCh2KSA6PSAwIGlmIHYgPT0gbnVsbFxcblxcbl9wZl9zcXNyYXBfY291bnQodikgOj0gY291bnQodikgaWYgaXNfYXJyYXkodilcXG5cXG5fcGZfc3FzcmFwX291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9zcXNyYXBfb3V0KG4pIGlmIG4gPiAxMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYWxsb3ctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVBcm5zXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJyZWRyaXZlUGVybWlzc2lvbiAlcyBkb2VzIG5vdCB0YWtlIHNvdXJjZVF1ZXVlQXJuczsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLiBZb3UgY2FuIHNwZWNpZnkgc291cmNlIHF1ZXVlIEFSTnMgb25seSB3aGVuIHRoZSBwZXJtaXNzaW9uIHR5cGUgaXMgYnlRdWV1ZS5cXFxcXFxcIlxcXCIsIFtwZXJtLCBfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JhcF9wb2wobmFtZSlcXG5cXHRwZXJtIDo9IG9iamVjdC5nZXQocG9sLCBcXFwicmVkcml2ZVBlcm1pc3Npb25cXFwiLCBudWxsKVxcblxcdHBlcm0gaW4ge1xcXCJhbGxvd0FsbFxcXCIsIFxcXCJkZW55QWxsXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcInNvdXJjZVF1ZXVlQXJuc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcmVkcml2ZS1hcm4tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3FzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkLWxldHRlciB0YXJnZXQgYW5kIGV2ZXJ5IFJlZHJpdmVBbGxvd1BvbGljeSBzb3VyY2UgcXVldWUgbXVzdCBzaXQgaW4gdGhlIGRlcGxveSByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNycl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L1NRU0RldmVsb3Blckd1aWRlL3Nxcy1kZWFkLWxldHRlci1xdWV1ZXMuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcnJfZml4IDo9IFxcXCJSZWZlcmVuY2UgcXVldWVzIGluIHRoZSBzYW1lIHJlZ2lvbiAoRm46OkdldEF0dCBRdWV1ZS5Bcm4gb2YgcXVldWVzIGluIHRoaXMgc3RhY2spXFxcIlxcblxcbiMgUmVkcml2ZVBvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNycl9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNycl9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcnJfYWxsb3cobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVBbGxvd1BvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JyX2FsbG93KG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcnJfcmVnaW9uKGFybikgOj0gcGFydHNbM10gaWYge1xcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1syXSA9PSBcXFwic3FzXFxcIlxcbn1cXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFybi1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiZGVhZExldHRlclRhcmdldEFybiBpcyBpbiAnJXMnIGJ1dCB0aGUgcXVldWUgZGVwbG95cyB0byAnJXMnOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVhZC1sZXR0ZXIgdGFyZ2V0IG11c3QgYmUgaW4gc2FtZSByZWdpb24gYXMgdGhlIHNvdXJjZS5cXFxcXFxcIlxcXCIsIFtyLCByZWdpb25dKSxcXG5cXHRfcGZfc3FzcnJfZml4LCBfcGZfc3FzcnJfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KF9wZl9zcXNycl9wb2wobmFtZSksIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHIgOj0gX3BmX3Nxc3JyX3JlZ2lvbihhcm4pXFxuXFx0ciAhPSByZWdpb25cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hcm4tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVBbGxvd1BvbGljeS5zb3VyY2VRdWV1ZUFybnMuJWRcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcInNvdXJjZSBxdWV1ZSAnJXMnIGlzIGluICclcycgYnV0IHRoZSBxdWV1ZSBkZXBsb3lzIHRvICclcyc7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJBbGwgc291cmNlIHF1ZXVlIEFSTnMgbXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIGN1cnJlbnQgU1FTIHF1ZXVlLlxcXFxcXFwiXFxcIiwgW2FybiwgciwgcmVnaW9uXSksXFxuXFx0X3BmX3Nxc3JyX2ZpeCwgX3BmX3Nxc3JyX3VybCkgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRhcm5zIDo9IG9iamVjdC5nZXQoX3BmX3Nxc3JyX2FsbG93KG5hbWUpLCBcXFwic291cmNlUXVldWVBcm5zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShhcm5zKVxcblxcdHNvbWUgaSwgYXJuIGluIGFybnNcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHIgOj0gX3BmX3Nxc3JyX3JlZ2lvbihhcm4pXFxuXFx0ciAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcmVkcml2ZS1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkcml2ZVBvbGljeSBuZWVkcyBkZWFkTGV0dGVyVGFyZ2V0QXJuIChhbiBTUVMgcXVldWUgQVJOKSBhbmQgbWF4UmVjZWl2ZUNvdW50IGluIDEuLjEwMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNycF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcnBfZml4IDo9IFxcXCJTZXQgYm90aCBkZWFkTGV0dGVyVGFyZ2V0QXJuIChGbjo6R2V0QXR0IFF1ZXVlLkFybikgYW5kIG1heFJlY2VpdmVDb3VudCBiZXR3ZWVuIDEgYW5kIDEwMDBcXFwiXFxuXFxuIyBSZWRyaXZlUG9saWN5IGFycml2ZXMgYXMgYSBKU09OIG9iamVjdCBvciBhcyBhIEpTT04gc3RyaW5nIChib3RoIGFyZSB2YWxpZCBDbG91ZEZvcm1hdGlvbikuXFxuX3BmX3Nxc3JwX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JwX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuJXNcXFwiLCBba2V5XSksXFxuXFx0c3ByaW50ZihcXFwiUmVkcml2ZVBvbGljeSBoYXMgbm8gJXM7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJSZWRyaXZlIHBvbGljeSBkb2VzIG5vdCBjb250YWluIG1hbmRhdG9yeSBhdHRyaWJ1dGU6ICVzLlxcXFxcXFwiXFxcIiwgW2tleSwga2V5XSksXFxuXFx0X3BmX3Nxc3JwX2ZpeCwgX3BmX3Nxc3JwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JwX3BvbChuYW1lKVxcblxcdHNvbWUga2V5IGluIFtcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIFxcXCJtYXhSZWNlaXZlQ291bnRcXFwiXVxcblxcdG9iamVjdC5nZXQocG9sLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc3JwX251bSh2KSA6PSB2IGlmIGlzX251bWJlcih2KVxcblxcbl9wZl9zcXNycF9udW0odikgOj0gdG9fbnVtYmVyKHYpIGlmIHtcXG5cXHRpc19zdHJpbmcodilcXG5cXHRyZWdleC5tYXRjaChcXFwiXlswLTldKyRcXFwiLCB2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZVBvbGljeS5tYXhSZWNlaXZlQ291bnRcXFwiLFxcblxcdHNwcmludGYoXFxcIm1heFJlY2VpdmVDb3VudCAldiBpcyBvdXRzaWRlIDEuLjEwMDA7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHZhbHVlIGZvciBtYXhSZWNlaXZlQ291bnQ6ICV2LCB2YWxpZCB2YWx1ZXMgYXJlIGZyb20gMSB0byAxMDAwIGJvdGggaW5jbHVzaXZlLlxcXFxcXFwiXFxcIiwgW24sIG5dKSxcXG5cXHRfcGZfc3FzcnBfZml4LCBfcGZfc3FzcnBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHBvbCA6PSBfcGZfc3FzcnBfcG9sKG5hbWUpXFxuXFx0biA6PSBfcGZfc3FzcnBfbnVtKG9iamVjdC5nZXQocG9sLCBcXFwibWF4UmVjZWl2ZUNvdW50XFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nxc3JwX291dChuKVxcbn1cXG5cXG5fcGZfc3FzcnBfb3V0KG4pIGlmIG4gPCAxXFxuXFxuX3BmX3Nxc3JwX291dChuKSBpZiBuID4gMTAwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gJyVzJyBpcyBub3QgYW4gU1FTIHF1ZXVlIEFSTjsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIk9ubHkgU1FTIHF1ZXVlcyBhcmUgdmFsaWQgcmVzb3VyY2VzIGZvciBkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcXFxcXCJcXFwiLCBbYXJuXSksXFxuXFx0X3BmX3Nxc3JwX2ZpeCwgX3BmX3Nxc3JwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JwX3BvbChuYW1lKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KHBvbCwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0bm90IGNvbnRhaW5zKGFybiwgXFxcIiR7XFxcIilcXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3FzOlxcXCIsIGFybilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtc3NlLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTcXNNYW5hZ2VkU3NlRW5hYmxlZDogdHJ1ZSBhbmQgS21zTWFzdGVyS2V5SWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAob25lIFNTRSB0eXBlIHBlciBxdWV1ZSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNzc2VfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3NzZV9maXggOj0gXFxcIktlZXAgZWl0aGVyIFNxc01hbmFnZWRTc2VFbmFibGVkOiB0cnVlIChTU0UtU1FTKSBvciBLbXNNYXN0ZXJLZXlJZCAoU1NFLUtNUyk7IFNxc01hbmFnZWRTc2VFbmFibGVkOiBmYWxzZSB3aXRoIGEga2V5IGlzIGZpbmVcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtc3NlLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS21zTWFzdGVyS2V5SWRcXFwiLFxcblxcdFxcXCJTcXNNYW5hZ2VkU3NlRW5hYmxlZCBpcyB0cnVlIGFuZCBLbXNNYXN0ZXJLZXlJZCBpcyBzZXQ7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJZb3UgY2FuIHVzZSBvbmUgdHlwZSBvZiBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIChTU0UpIGF0IG9uZSB0aW1lLiBZb3UgY2FuIGVpdGhlciBlbmFibGUgS01TIFNTRSBvciBTUVMgU1NFLlxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc3Fzc3NlX2ZpeCwgX3BmX3Nxc3NzZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TcXNNYW5hZ2VkU3NlRW5hYmxlZFxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkttc01hc3RlcktleUlkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVNMIE5leHQvRGVmYXVsdC9DaG9pY2VzIG11c3QgcmVmZXJlbmNlIGEgZGVmaW5lZCBzdGF0ZSAodG9wLWxldmVsIHN0YXRlczsgYSBkYW5nbGluZyBTdGFydEF0IGlzIGNvdmVyZWQgYnkgZW5naW5lIHJ1bGUgRTM2MDEpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5fZml4IDo9IFxcXCJQb2ludCBOZXh0L0RlZmF1bHQvQ2hvaWNlcyBhdCBhbiBleGlzdGluZyBzdGF0ZSBuYW1lXFxcIlxcblxcbl9wZl9zZm5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2Utc3RhdGVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nmbl9hc2wobmFtZSkgOj0gYXNsIGlmIHtcXG5cXHRkZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIilcXG5cXHRpc19zdHJpbmcoZGVmKVxcblxcdGFzbCA6PSBqc29uLnVubWFyc2hhbChkZWYpXFxuXFx0aXNfb2JqZWN0KGFzbClcXG59XFxuXFxuX3BmX3Nmbl9kZWZpbmVkKGFzbCkgOj0ge3NuIHwgc29tZSBzbiwgXyBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KX1cXG5cXG4jIE5PVEU6IGEgZGFuZ2xpbmcgU3RhcnRBdCBpcyBkZWxpYmVyYXRlbHkgTk9UIGNoZWNrZWQgaGVyZSDigJQgdGhlIGVuZ2luZSdzXFxuIyBidWlsdC1pbiBydWxlIEUzNjAxIChFUlJPUi9DRk5fTElOVCkgYWxyZWFkeSBjb3ZlcnMgaXQuIFZlcmlmaWVkIGFnYWluc3RcXG4jIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTAxOiBFMzYwMSBmaXJlcyBmb3JcXG4jIFN0YXJ0QXQgb25seSBhbmQgZG9lcyBub3QgY2hlY2sgTmV4dC9EZWZhdWx0L0Nob2ljZXMsIHdoaWNoIGlzIHdoYXQgdGhpc1xcbiMgcnVsZSBhZGRzLlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIHJlZmVyZW5jZXMgc3RhdGUgJyVzJyB2aWEgJXMsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXQsIGtleV0pLFxcblxcdF9wZl9zZm5fZml4LCBfcGZfc2ZuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdGFzbCA6PSBfcGZfc2ZuX2FzbChuYW1lKVxcblxcdHNvbWUgc25hbWUsIHN0IGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHN0KVxcblxcdHNvbWUga2V5IGluIHtcXFwiTmV4dFxcXCIsIFxcXCJEZWZhdWx0XFxcIn1cXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChzdCwga2V5LCBudWxsKVxcblxcdGlzX3N0cmluZyh0YXJnZXQpXFxuXFx0bm90IHRhcmdldCBpbiBfcGZfc2ZuX2RlZmluZWQoYXNsKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZ1xcXCIsXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBoYXMgYSBDaG9pY2UgcnVsZSByZWZlcmVuY2luZyBzdGF0ZSAnJXMnLCBidXQgbm8gc3RhdGUgd2l0aCB0aGF0IG5hbWUgaXMgZGVmaW5lZFxcXCIsIFtzbmFtZSwgdGFyZ2V0XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0Y2hvaWNlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQ2hvaWNlc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KGNob2ljZXMpXFxuXFx0c29tZSBjIGluIGNob2ljZXNcXG5cXHRpc19vYmplY3QoYylcXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChjLCBcXFwiTmV4dFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtdGFncy1hd3MtcHJlZml4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwidGFnc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWcga2V5cyBtYXkgbm90IHVzZSB0aGUgcmVzZXJ2ZWQgYXdzOiBwcmVmaXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIipcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRhZ3Mgc3Vydml2ZSBpbnRvIHRoZSB0ZW1wbGF0ZSBmcm9tIGV2ZXJ5IHNjb3BlIHRoYXQgY2FsbGVkIFRhZ3Mub2YoKSwgYW5kIHRoZVxcbiMgbWVyZ2UgaGFwcGVucyBpbiBjZm5Qcm9wZXJ0aWVzIGF0IHJlbmRlciB0aW1lIC0gYWZ0ZXIgdmFsaWRhdGVUcmVlIC0gc28gbm8gTDFcXG4jIG9yIEwyIHZhbGlkYXRpb24gY2FuIHNlZSB0aGUgZmluYWwga2V5IHNldC4gQXBwbGllcyB0byBldmVyeSByZXNvdXJjZSB0eXBlLlxcbl9wZl90YWdhd3NfYmFkIGNvbnRhaW5zIFtuYW1lLCBpZHgsIGtleV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiBvYmplY3Qua2V5cyhpbnB1dC5yZXNvdXJjZXMpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYWdzXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRrZXkgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiS2V5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa2V5KVxcblxcdHN0YXJ0c3dpdGgobG93ZXIoa2V5KSwgXFxcImF3czpcXFwiKVxcblxcdGlkeCA6PSB0LmluZGV4XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtdGFncy1hd3MtcHJlZml4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhZ3MuJWQuS2V5XFxcIiwgW2lkeF0pLFxcblxcdHNwcmludGYoXFxcIlRhZyBrZXkgJyVzJyB1c2VzIHRoZSByZXNlcnZlZCBhd3M6IHByZWZpeDsgQVdTIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIHdpdGggXFxcXFxcXCJhd3M6IHByZWZpeGVkIHRhZyBrZXkgbmFtZXMgYXJlIG5vdCBhbGxvd2VkIGZvciBleHRlcm5hbCB1c2UuXFxcXFxcXCJcXFwiLCBba2V5XSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFnIGtleSBzbyBpdCBkb2VzIG5vdCBzdGFydCB3aXRoIGF3czpcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdGFnLWVkaXRvci9sYXRlc3QvdXNlcmd1aWRlL3RhZ2dpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBpZHgsIGtleV0gaW4gX3BmX3RhZ2F3c19iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi10YWdzLWNvdW50LW1heFwiLFxuICAgIFwic2VydmljZVwiOiBcInRhZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZXNvdXJjZSBtYXkgY2FycnkgYXQgbW9zdCA1MCB0YWdzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCIqXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgQVdTLXdpZGUgbGltaXQgaXMgNTAgdXNlciB0YWdzIHBlciByZXNvdXJjZS4gQ291bnRlZCBvbiB0aGUgcmVuZGVyZWRcXG4jIHRlbXBsYXRlLCB3aGljaCBpcyB0aGUgb25seSBwbGFjZSB0aGUgbWVyZ2VkIFRhZ3Mub2YoKSByZXN1bHQgZXhpc3RzLlxcbl9wZl90YWdjb3VudF9iYWQgY29udGFpbnMgW25hbWUsIG5dIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gb2JqZWN0LmtleXMoaW5wdXQucmVzb3VyY2VzKVxcblxcdHRhZ3MgOj0gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhZ3NcXFwiKVxcblxcdG4gOj0gY291bnQodGFncylcXG5cXHRuID4gNTBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi10YWdzLWNvdW50LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFnc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgdGFncyBhcmUgYXR0YWNoZWQgdG8gdGhpcyByZXNvdXJjZTsgQVdTIGFsbG93cyBhdCBtb3N0IDUwIHBlciByZXNvdXJjZSBhbmQgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGwgKFxcXFxcXFwiTW9yZSB0aGFuIDUwIHRhZ3Mgc3BlY2lmaWVkLlxcXFxcXFwiKVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlZHVjZSB0aGUgdGFnIHNldCB0byA1MCBvciBmZXdlciAtIHJlbWVtYmVyIHRoYXQgVGFncy5vZigpIGFkZHMgdGFncyBmcm9tIGV2ZXJ5IGVuY2xvc2luZyBzY29wZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS90YWctZWRpdG9yL2xhdGVzdC91c2VyZ3VpZGUvdGFnZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIG5dIGluIF9wZl90YWdjb3VudF9iYWRcXG59XFxuXCJcbiAgfVxuXTtcbiJdfQ==
|
|
3067
|
+
/** Shared helper modules (rules/_lib). Always loaded before the rules. */
|
|
3068
|
+
exports.BUNDLED_LIBS = [
|
|
3069
|
+
{
|
|
3070
|
+
"name": "_lib/sfn",
|
|
3071
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n# Shared helpers for the Step Functions rules (rules/stepfunctions/pf-sfn-*).\n# Loaded ahead of every rule (BUNDLED_LIBS); never emits diagnostics.\n#\n# A definition arrives either as DefinitionString (JSON text — Fn::Join /\n# Fn::Sub over pseudo parameters resolve() flattens; a reference to another\n# resource does not resolve and the ASL rules skip the machine) or as the raw\n# Definition object of an L1 resource (intrinsics inside are marker objects,\n# never strings, so is_string guards mute them).\n\n_pf_sfnlib_asl(name) := asl if {\n\tdef := resolve(name, \"Properties.DefinitionString\")\n\tis_string(def)\n\tasl := json.unmarshal(def)\n\tis_object(asl)\n}\n\n_pf_sfnlib_asl(name) := asl if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"DefinitionString\", \"__pf_absent\") == \"__pf_absent\"\n\tasl := object.get(props, \"Definition\", null)\n\tis_object(asl)\n}\n\n# Property path prefix for diagnostics.\n_pf_sfnlib_prop(name) := \"Properties.DefinitionString\" if {\n\tobject.get(input.resources[name].properties, \"DefinitionString\", \"__pf_absent\") != \"__pf_absent\"\n}\n\n_pf_sfnlib_prop(name) := \"Properties.Definition\" if {\n\tobject.get(input.resources[name].properties, \"DefinitionString\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n# Child workflows directly inside a States block: [path, states, startAt] for\n# every Parallel branch and Map ItemProcessor / Iterator.\n_pf_sfnlib_kids(path, states) := kids if {\n\tbranches := {[cp, cs, sa] |\n\t\tsome sname, st in states\n\t\tis_object(st)\n\t\tarr := object.get(st, \"Branches\", [])\n\t\tis_array(arr)\n\t\tsome i, b in arr\n\t\tis_object(b)\n\t\tcs := object.get(b, \"States\", null)\n\t\tis_object(cs)\n\t\tsa := object.get(b, \"StartAt\", null)\n\t\tcp := sprintf(\"%s.%s.Branches[%d].States\", [path, sname, i])\n\t}\n\tprocs := {[cp, cs, sa] |\n\t\tsome sname, st in states\n\t\tis_object(st)\n\t\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\t\tproc := object.get(st, key, null)\n\t\tis_object(proc)\n\t\tcs := object.get(proc, \"States\", null)\n\t\tis_object(cs)\n\t\tsa := object.get(proc, \"StartAt\", null)\n\t\tcp := sprintf(\"%s.%s.%s.States\", [path, sname, key])\n\t}\n\tkids := branches | procs\n}\n\n# Every States block of every state machine: [name, path, states, startAt].\n_pf_sfnlib_scope0 contains [name, \"States\", s, sa] if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfnlib_asl(name)\n\ts := object.get(asl, \"States\", null)\n\tis_object(s)\n\tsa := object.get(asl, \"StartAt\", null)\n}\n\n_pf_sfnlib_scope1 contains [name, cp, cs, sa] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scope0\n\tsome [cp, cs, sa] in _pf_sfnlib_kids(p, s)\n}\n\n_pf_sfnlib_scope2 contains [name, cp, cs, sa] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scope1\n\tsome [cp, cs, sa] in _pf_sfnlib_kids(p, s)\n}\n\n_pf_sfnlib_scope3 contains [name, cp, cs, sa] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scope2\n\tsome [cp, cs, sa] in _pf_sfnlib_kids(p, s)\n}\n\n# ponytail: Rego cannot recurse and the engine has no walk(), so nesting is\n# expanded to depth 3 (Parallel/Map inside Parallel/Map inside Parallel/Map).\n# States nested deeper are simply not inspected; add a scope4 line to extend.\n_pf_sfnlib_scopes := ((_pf_sfnlib_scope0 | _pf_sfnlib_scope1) | _pf_sfnlib_scope2) | _pf_sfnlib_scope3\n\n# Every state: [name, scope path, scope states, state name, state object].\n_pf_sfnlib_states contains [name, p, s, sname, st] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scopes\n\tsome sname, st in s\n\tis_object(st)\n}\n\n_pf_sfnlib_path(name, p, sname) := sprintf(\"%s.%s.%s\", [_pf_sfnlib_prop(name), p, sname])\n\n_pf_sfnlib_type(name) := t if {\n\tt := resolve(name, \"Properties.StateMachineType\")\n\tis_string(t)\n}\n\n_pf_sfnlib_type(name) := \"STANDARD\" if {\n\tnot resolve(name, \"Properties.StateMachineType\")\n}\n\n# Effective query language of a state: state-level, then top-level, then JSONPath.\n_pf_sfnlib_ql(name, st) := q if {\n\tq := object.get(st, \"QueryLanguage\", null)\n\tis_string(q)\n}\n\n_pf_sfnlib_ql(name, st) := q if {\n\tnot is_string(object.get(st, \"QueryLanguage\", null))\n\tq := object.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null)\n\tis_string(q)\n}\n\n_pf_sfnlib_ql(name, st) := \"JSONPath\" if {\n\tnot is_string(object.get(st, \"QueryLanguage\", null))\n\tnot is_string(object.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null))\n}\n\n# Presence test that treats intrinsic marker objects as present.\n_pf_sfnlib_has(obj, key) if {\n\tobject.get(obj, key, \"__pf_absent\") != \"__pf_absent\"\n}\n\n# Choice rules of a Choice state: [name, path, states, state name, index, rule].\n_pf_sfnlib_choice contains [name, p, s, sname, i, c] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Choice\"\n\tarr := object.get(st, \"Choices\", null)\n\tis_array(arr)\n\tsome i, c in arr\n\tis_object(c)\n}\n\n# Optimized / SDK integration Task states: [name, path, states, state name,\n# state, service, api] for Resource = arn:<partition>:states:::<service>:<api>.\n_pf_sfnlib_integration contains [name, p, s, sname, st, svc, api] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Task\"\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tparts := split(res, \":\")\n\tcount(parts) >= 7\n\tparts[2] == \"states\"\n\tparts[3] == \"\"\n\tparts[4] == \"\"\n\tsvc := parts[5]\n\tapi := concat(\":\", array.slice(parts, 6, count(parts)))\n}\n"
|
|
3072
|
+
}
|
|
3073
|
+
];
|
|
3074
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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RixDQUFDO0FBT0YsMEVBQTBFO0FBQzdELFFBQUEsWUFBWSxHQUFxQjtJQUM1QztRQUNFLE1BQU0sRUFBRSxVQUFVO1FBQ2xCLE1BQU0sRUFBRSwwK0tBQTArSztLQUNuL0s7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHNjcmlwdHMvYnVuZGxlLXJ1bGVzLnRzIGZyb20gcnVsZXMvKiouIERvIG5vdCBlZGl0IGJ5IGhhbmQuXG4vLyB+fiBSZWdlbmVyYXRlIHdpdGg6IG5weCBwcm9qZW4gYnVuZGxlLXJ1bGVzXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVkUnVsZURhdGEge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwc3RyZWFtOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWdvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCVU5ETEVEX1JVTEVTOiBCdW5kbGVkUnVsZURhdGFbXSA9IFtcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY2Nlc3MgbG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgYSByZXF1ZXN0IGlkIHZhcmlhYmxlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZm9ybWF0IHN0cmluZyBpcyBvcGFxdWUgdG8gZXZlcnkgc2NoZW1hIGxheWVyOyB0aGUgc2VydmljZSByZXF1aXJlcyBhXFxuIyByZXF1ZXN0IGlkIHZhcmlhYmxlIHNvbWV3aGVyZSBpbnNpZGUgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NMb2dTZXR0aW5nLkZvcm1hdFxcXCIsXFxuXFx0XFxcIkFjY2VzcyBsb2cgZm9ybWF0IGhhcyBubyByZXF1ZXN0IGlkIHZhcmlhYmxlOyB0aGUgc3RhZ2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgTG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgZWl0aGVyICRjb250ZXh0LnJlcXVlc3RJZCBvciAkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkICRjb250ZXh0LnJlcXVlc3RJZCAob3IgJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWQpIHRvIHRoZSBhY2Nlc3MgbG9nIGZvcm1hdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXQtdXAtbG9nZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVxcXCIpXFxuXFx0Zm10IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZXNzTG9nU2V0dGluZy5Gb3JtYXRcXFwiKVxcblxcdGlzX3N0cmluZyhmbXQpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LnJlcXVlc3RJZFxcXCIpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hdXRob3JpemVyLXR0bC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kcyB0b3BzIG91dCBhdCAzNjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgdGhlIFRUTCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIDM2MDAgY2VpbGluZyBpc1xcbiMgb25seSBpbiB0aGUgc2VydmljZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWF1dGhvcml6ZXItdHRsLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBdXRob3JpemVyIHJlc3VsdCBUVEwgb3V0c2lkZSBhbGxvd2FibGUgcmFuZ2UuIFRUTCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzLlxcXFxcXFwiXFxcIiwgW3R0bF0pLFxcblxcdFxcXCJVc2UgYSBUVEwgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0dHRsIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHNcXFwiKSlcXG5cXHR0dGwgPiAzNjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVycyBuZWVkIFByb3ZpZGVyQVJOc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIENvZ25pdG8gYXV0aG9yaXplciB2YWxpZGF0ZXMgdG9rZW5zIGFnYWluc3QgdGhlIHVzZXIgcG9vbHMgbGlzdGVkIGluXFxuIyBQcm92aWRlckFSTnM7IHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnY3BhX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm92aWRlckFSTnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3ZpZGVyQVJOc1xcXCIsXFxuXFx0XFxcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIGhhcyBubyBQcm92aWRlckFSTnM7IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvdmlkZXJBUk5zIGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFByb3ZpZGVyQVJOcyB0byB0aGUgQ29nbml0byB1c2VyIHBvb2wgQVJOKHMpIHRoaXMgYXV0aG9yaXplciBzaG91bGQgdXNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDT0dOSVRPX1VTRVJfUE9PTFNcXFwiXFxuXFx0X3BmX2FwZ2NwYV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctZGVwbG95bWVudC1uby1tZXRob2RzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIERlcGxveW1lbnQgbmVlZHMgYXQgbGVhc3Qgb25lIE1ldGhvZCBvbiBpdHMgUkVTVCBBUElcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRGVwbG95aW5nIGFuIEFQSSB3aXRoIHplcm8gbWV0aG9kcyBmYWlscy4gSnVkZ2VkIG9ubHkgd2hlbiB0aGUgd2hvbGVcXG4jIHBpY3R1cmUgaXMgaW4gdGhpcyB0ZW1wbGF0ZTogdGhlIGFwaSBpcyBhIHNpYmxpbmcgcmVzb3VyY2UgYW5kIGl0IGhhcyBub1xcbiMgT3BlbkFQSSBib2R5ICh3aGljaCB3b3VsZCBkZWZpbmUgbWV0aG9kcyBpbnZpc2libHkpLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnZG5tX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2FwZ2RubV9zZXJ2ZWQoYXBpKSBpZiB7XFxuXFx0c29tZSBtIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0cmVzb2x2ZShtLCBcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiKSA9PSBhcGlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1kZXBsb3ltZW50LW5vLW1ldGhvZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUkVTVCBBUEkgJyVzJyBoYXMgbm8gQVdTOjpBcGlHYXRld2F5OjpNZXRob2QgaW4gdGhpcyB0ZW1wbGF0ZTsgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBSRVNUIEFQSSBkb2Vzbid0IGNvbnRhaW4gYW55IG1ldGhvZHNcXFxcXFxcIlxcXCIsIFthcGldKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCB0byB0aGUgQVBJIGJlZm9yZSBkZXBsb3lpbmcgaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWRlcGxveW1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFxcXCIpXFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVMzTG9jYXRpb25cXFwiKVxcblxcdG5vdCBfcGZfYXBnZG5tX3NlcnZlZChhcGkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbi1NT0NLIGludGVncmF0aW9ucyBuZWVkIEludGVncmF0aW9uSHR0cE1ldGhvZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IGludGVncmF0aW9uIHR5cGUgZXhjZXB0IE1PQ0sgY2FsbHMgYSBiYWNrZW5kIGFuZCBuZWVkcyB0aGUgSFRUUFxcbiMgbWV0aG9kIHRvIGNhbGwgaXQgd2l0aC4gVmVyaWZpZWQgZm9yIGFsbCBmb3VyIG5vbi1NT0NLIHR5cGVzLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnaWhtX3R5cGVzIDo9IHtcXFwiQVdTXFxcIiwgXFxcIkFXU19QUk9YWVxcXCIsIFxcXCJIVFRQXFxcIiwgXFxcIkhUVFBfUFJPWFlcXFwifVxcblxcbl9wZl9hcGdpaG1fbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0aW50ZWcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkludGVncmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGludGVnKVxcblxcdG9iamVjdC5nZXQoaW50ZWcsIFxcXCJJbnRlZ3JhdGlvbkh0dHBNZXRob2RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW50ZWdyYXRpb24gdHlwZSAnJXMnIGhhcyBubyBJbnRlZ3JhdGlvbkh0dHBNZXRob2Q7IHRoZSBtZXRob2QgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFbnVtZXJhdGlvbiB2YWx1ZSBmb3IgSHR0cE1ldGhvZCBtdXN0IGJlIG5vbi1lbXB0eVxcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRcXFwiU2V0IEludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZCAoUE9TVCBmb3IgQVdTL0FXU19QUk9YWSBMYW1iZGEgYmFja2VuZHMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tZXRob2QuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb24uVHlwZVxcXCIpXFxuXFx0dCBpbiBfcGZfYXBnaWhtX3R5cGVzXFxuXFx0X3BmX2FwZ2lobV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbWV0aG9kLWF1dGhvcml6ZXItaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNVU1RPTSBhbmQgQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6YXRpb24gbmVlZCBBdXRob3JpemVySWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGF1dGhvcml6ZXItYmFja2VkIGF1dGhvcml6YXRpb24gdHlwZXMgcG9pbnQgYXQgYW4gQXV0aG9yaXplcjsgdGhlXFxuIyBtZXRob2QgY3JlYXRlIHJlamVjdHMgdGhlbSB3aXRob3V0IG9uZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ21haWRfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tZXRob2QtYXV0aG9yaXplci1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplcklkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemF0aW9uVHlwZSAnJXMnIGlzIHNldCBidXQgQXV0aG9yaXplcklkIGlzIG5vdDsgdGhlIG1ldGhvZCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgYXV0aG9yaXplciBJRCBzcGVjaWZpZWQuIFNldHRpbmcgdGhlIGF1dGhvcml6YXRpb24gdHlwZSB0byBDVVNUT00gb3IgQ09HTklUT19VU0VSX1BPT0xTIHJlcXVpcmVzIGEgdmFsaWQgYXV0aG9yaXplci5cXFxcXFxcIlxcXCIsIFthdF0pLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplcklkIHRvIHRoZSBhdXRob3JpemVyIHRoaXMgbWV0aG9kIHNob3VsZCB1c2UsIG9yIGNoYW5nZSBBdXRob3JpemF0aW9uVHlwZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0YXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemF0aW9uVHlwZVxcXCIpXFxuXFx0YXQgaW4ge1xcXCJDVVNUT01cXFwiLCBcXFwiQ09HTklUT19VU0VSX1BPT0xTXFxcIn1cXG5cXHRfcGZfYXBnbWFpZF9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbW9kZWwtc2NoZW1hLXR5cGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1vZGVsIHNjaGVtYSAndHlwZScgbXVzdCBiZSBhIEpTT04gU2NoZW1hIGRyYWZ0LTQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIFNjaGVtYSBib2R5IGlzIG9wYXF1ZSBKU09OIHRvIGV2ZXJ5IHNjaGVtYSBsYXllci4gRnVsbCBkcmFmdC00XFxuIyB2YWxpZGF0aW9uIGlzIG91dCBvZiBzY29wZTsgYSBsaXRlcmFsIHRvcC1sZXZlbCBcXFwidHlwZVxcXCIgb3V0c2lkZSB0aGVcXG4jIGRyYWZ0LTQgc2V0IChhIGNvbW1vbiB0eXBvIGxpa2UgXFxcIlN0cmluZ1xcXCIpIGlzIHByb3ZhYmx5IGZhdGFsLlxcbl9wZl9hcGdtc3RfdHlwZXMgOj0ge1xcXCJhcnJheVxcXCIsIFxcXCJib29sZWFuXFxcIiwgXFxcImludGVnZXJcXFwiLCBcXFwibnVsbFxcXCIsIFxcXCJudW1iZXJcXFwiLCBcXFwib2JqZWN0XFxcIiwgXFxcInN0cmluZ1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tb2RlbC1zY2hlbWEtdHlwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZW1hLnR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIk1vZGVsIHNjaGVtYSB0eXBlICclcycgaXMgbm90IGEgSlNPTiBTY2hlbWEgZHJhZnQtNCB0eXBlOyB0aGUgbW9kZWwgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIG1vZGVsIHNwZWNpZmllZDogVmFsaWRhdGlvbiBSZXN1bHQ6IHdhcm5pbmdzIDogW10sIGVycm9ycyA6IFtJbnZhbGlkIG1vZGVsIHNjaGVtYSBzcGVjaWZpZWRdXFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIGFycmF5LCBib29sZWFuLCBpbnRlZ2VyLCBudWxsLCBudW1iZXIsIG9iamVjdCwgc3RyaW5nIChsb3dlcmNhc2UpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tb2RlbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFxcXCIpXFxuXFx0c2NoIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZW1hXFxcIilcXG5cXHRpc19vYmplY3Qoc2NoKVxcblxcdHQgOj0gb2JqZWN0LmdldChzY2gsIFxcXCJ0eXBlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHR0ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRub3QgdCBpbiBfcGZfYXBnbXN0X3R5cGVzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctcmVzb3VyY2UtcGF0aC1wYXJ0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXRoUGFydCBhbGxvd3MgYS16QS1aMC05Ll8tOiBvciBvbmUgY3VybHktYnJhY2UgdmFyaWFibGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFZhbGlkIGZvcm1zIHBlciB0aGUgc2VydmljZSBlcnJvciBpdHNlbGY6IHBsYWluIFthLXpBLVowLTkuXzotXSssIG9yIGFcXG4jIHdob2xlLXBhcnQgdmFyaWFibGUge25hbWV9IC8gZ3JlZWR5IHtuYW1lK30uXFxuX3BmX2FwZ3JwcF9vayhwcCkgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Ll86LV0rJGAsIHBwKVxcblxcbl9wZl9hcGdycHBfb2socHApIGlmIHJlZ2V4Lm1hdGNoKGBeXFxcXHtbYS16QS1aMC05Ll8tXStcXFxcKz9cXFxcfSRgLCBwcClcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXJlc291cmNlLXBhdGgtcGFydFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF0aFBhcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBhdGhQYXJ0ICclcycgaGFzIGNoYXJhY3RlcnMgdGhlIHNlcnZpY2UgcmVqZWN0czsgdGhlIHJlc291cmNlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUmVzb3VyY2UncyBwYXRoIHBhcnQgb25seSBhbGxvdyBhLXpBLVowLTkuXy06IG9yIGEgdmFsaWQgZ3JlZWR5IHBhdGggdmFyaWFibGUgYW5kIGN1cmx5IGJyYWNlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kLlxcXFxcXFwiXFxcIiwgW3BwXSksXFxuXFx0XFxcIlVzZSBvbmx5IGEtekEtWjAtOS5fLTogaW4gdGhlIHBhdGggcGFydCwgb3IgYSBzaW5nbGUge3ZhcmlhYmxlfSAvIHtncmVlZHkrfSBmb3JtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1yZXNvdXJjZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVxcXCIpXFxuXFx0cHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXRoUGFydFxcXCIpXFxuXFx0aXNfc3RyaW5nKHBwKVxcblxcdG5vdCBfcGZfYXBncnBwX29rKHBwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXN0YWdlLXZhcmlhYmxlLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFnZSB2YXJpYWJsZSB2YWx1ZXMgaGF2ZSBhIHJlc3RyaWN0ZWQgY2hhcmFjdGVyIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQWxsb3dlZCBwZXIgdGhlIHNlcnZpY2UgZXJyb3IgaXRzZWxmOiBhbHBoYW51bWVyaWNzIHBsdXMgc3BhY2UgYW5kXFxuIyAtIC4gXyA6IC8gPyAmID0gLCAobm90ZTogc3BhY2UgSVMgbGVnYWwpLlxcbl9wZl9hcGdzdnZfb2sodikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fOi8/Jj0sLV0qJGAsIHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1zdGFnZS12YXJpYWJsZS12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5WYXJpYWJsZXMuJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIlN0YWdlIHZhcmlhYmxlICclcycgaGFzIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYWxsb3dlZCBzZXQ7IHRoZSBzdGFnZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgc3RhZ2UgdmFyaWFibGUgdmFsdWUgb2Yga2V5ICVzLiAgUGxlYXNlIHVzZSB2YWx1ZXMgd2l0aCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIHN5bWJvbHMgJyAnLCAtJywgJy4nLCAnXycsICc6JywgJy8nLCAnPycsICcmJywgJz0nLCBhbmQgJywnLlxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiUmVzdHJpY3QgdGhlIHZhbHVlIHRvIGFscGhhbnVtZXJpY3MgYW5kICcgJywgLSwgLiwgXywgOiwgLywgPywgJiwgPSwgLFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdGFnZS12YXJpYWJsZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcXFwiKVxcblxcdHZhcnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WYXJpYWJsZXNcXFwiKVxcblxcdGlzX29iamVjdCh2YXJzKVxcblxcdHNvbWUgaywgdiBpbiB2YXJzXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IF9wZl9hcGdzdnZfb2sodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVE9LRU4gYXV0aG9yaXplcnMgbmVlZCBJZGVudGl0eVNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUT0tFTiBhdXRob3JpemVycyByZWFkIHRoZSB0b2tlbiBmcm9tIHRoZSBoZWFkZXIgbmFtZWQgYnkgSWRlbnRpdHlTb3VyY2UsXFxuIyBzbyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gUkVRVUVTVCBhdXRob3JpemVycyBhcmUgb3V0IG9mXFxuIyBzY29wZTogdGhleSBuZWVkIGl0IG9ubHkgd2l0aCBjYWNoaW5nIGVuYWJsZWQgKHVubWVhc3VyZWQpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBndGlzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJZGVudGl0eVNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRlbnRpdHlTb3VyY2VcXFwiLFxcblxcdFxcXCJUT0tFTiBhdXRob3JpemVyIGhhcyBubyBJZGVudGl0eVNvdXJjZTsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJZGVudGl0eVNvdXJjZSBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBJZGVudGl0eVNvdXJjZSwgZS5nLiBtZXRob2QucmVxdWVzdC5oZWFkZXIuQXV0aG9yaXphdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVE9LRU5cXFwiXFxuXFx0X3BmX2FwZ3Rpc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hcGktbmFtZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBcGkgbmVlZHMgYSBOYW1lIHVubGVzcyBhbiBPcGVuQVBJIGJvZHkgcHJvdmlkZXMgb25lXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNaXJyb3JzIGNmbi1saW50IEUzNjYwIGZvciBSRVNUIEFQSXMsIHdoaWNoIGhhcyBubyBBcGlHYXRld2F5VjJcXG4jIGNvdW50ZXJwYXJ0OiB3aXRob3V0IGEgQm9keSB0byBjYXJyeSBpbmZvLnRpdGxlLCBOYW1lIGlzIG1hbmRhdG9yeS5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItYXBpLW5hbWUtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdFxcXCJBcGkgaGFzIG5vIE5hbWUgYW5kIG5vIE9wZW5BUEkgYm9keSB0byB0YWtlIG9uZSBmcm9tOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBBUEkgbmFtZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBOYW1lLCBvciBwcm92aWRlIHRoZSBkZWZpbml0aW9uIHZpYSBCb2R5IC8gQm9keVMzTG9jYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXBpLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIk5hbWVcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJCb2R5UzNMb2NhdGlvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFXU19QUk9YWSBpbnRlZ3JhdGlvbnMgdGFrZSBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjAgb3IgMi4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNjb3BlZCB0byBpbnRlZ3JhdGlvbnMgd2hvc2UgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUCAodGhlIGJlbmNoZWRcXG4jIHNoYXBlKTsgV2ViU29ja2V0IGludGVncmF0aW9ucyBhcmUgb3V0IG9mIHNjb3BlLlxcbl9wZl9hZ3YyYXBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGF5bG9hZEZvcm1hdFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIGludGVncmF0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVW5zdXBwb3J0ZWQgUGF5bG9hZEZvcm1hdFZlcnNpb246ICVzXFxcXFxcXCJcXFwiLCBbcHYsIHB2XSksXFxuXFx0XFxcIlVzZSAxLjAgb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkFXU19QUk9YWVxcXCJcXG5cXHRfcGZfYWd2MmFwcF9odHRwX2FwaShuYW1lKVxcblxcdHB2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiKVxcblxcdGlzX3N0cmluZyhwdilcXG5cXHRub3QgcHYgaW4ge1xcXCIxLjBcXFwiLCBcXFwiMi4wXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWNvcnMtY3JlZGVudGlhbHMtd2lsZGNhcmRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09SUyBBbGxvd0NyZWRlbnRpYWxzIGNhbm5vdCBwYWlyIHdpdGggYSB3aWxkY2FyZCBvcmlnaW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBDT1JTIHNwZWMgZm9yYmlkcyBjcmVkZW50aWFsZWQgcmVxdWVzdHMgYWdhaW5zdCBhIHdpbGRjYXJkIG9yaWdpbixcXG4jIGFuZCB0aGUgQVBJIGNyZWF0ZSBlbmZvcmNlcyBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItY29ycy1jcmVkZW50aWFscy13aWxkY2FyZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnMuJWRcXFwiLCBbby5pbmRleF0pLFxcblxcdFxcXCJDb3JzQ29uZmlndXJhdGlvbiBzZXRzIEFsbG93Q3JlZGVudGlhbHMgd2l0aCBhICcqJyBvcmlnaW47IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJhbGxvdy1jcmVkZW50aWFscyBpcyBub3Qgc3VwcG9ydGVkIGlmICdhbGxvdy1vcmlnaW4nIGlzICpcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkxpc3QgZXhwbGljaXQgb3JpZ2lucywgb3IgZHJvcCBBbGxvd0NyZWRlbnRpYWxzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWNvcnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29yc0NvbmZpZ3VyYXRpb24uQWxsb3dDcmVkZW50aWFsc1xcXCIpKSA9PSB0cnVlXFxuXFx0c29tZSBvIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnNcXFwiKVxcblxcdG8udmFsdWUgPT0gXFxcIipcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHRha2UgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSAyLjAgZXZlbnQgZm9ybWF0IGlzIExhbWJkYS1vbmx5OyBIVFRQX1BST1hZIGJhY2tlbmRzIG11c3Qgc3RheSBvblxcbiMgMS4wLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgc2hhcGUgKEFwaSBzaWJsaW5nIHByb3ZhYmx5IEhUVFApLlxcbl9wZl9hZ3YyaHBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLFxcblxcdFxcXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHN1cHBvcnQgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wOyB0aGUgaW50ZWdyYXRpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXlsb2FkRm9ybWF0VmVyc2lvbiAyLjAgaXMgbm90IHN1cHBvcnRlZCBmb3IgaW50ZWdyYXRpb24gb2YgdHlwZSBIVFRQX1BST1hZXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUGF5bG9hZEZvcm1hdFZlcnNpb24gdG8gMS4wIChvciBvbWl0IGl0KSwgb3Igc3dpdGNoIHRvIGFuIEFXU19QUk9YWSBpbnRlZ3JhdGlvbiBmb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkhUVFBfUFJPWFlcXFwiXFxuXFx0X3BmX2FndjJocHBfaHR0cF9hcGkobmFtZSlcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIikgPT0gXFxcIjIuMFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJIHJvdXRlIGtleXMgYXJlIFxcXCJNRVRIT0QgL3BhdGhcXFwiIG9yICRkZWZhdWx0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCByb3V0ZSBrZXlzIGFyZSBmcmVlLWZvcm0sIHNvIHRoaXMgb25seSBqdWRnZXMgcm91dGVzIHdob3NlIEFwaVxcbiMgc2libGluZyBpcyBwcm92YWJseSBIVFRQLiBUUkFDRSBpcyBkZXBsb3ktdmVyaWZpZWQgYXMgcmVqZWN0ZWQ7IHBhdGhzIHdpdGhcXG4jIHNwYWNlcyBhcmUgbGVmdCBhbG9uZSAodW5tZWFzdXJlZCkuXFxuX3BmX2FndjJya19tZXRob2RzIDo9IHtcXFwiR0VUXFxcIiwgXFxcIlBPU1RcXFwiLCBcXFwiUFVUXFxcIiwgXFxcIlBBVENIXFxcIiwgXFxcIkRFTEVURVxcXCIsIFxcXCJIRUFEXFxcIiwgXFxcIk9QVElPTlNcXFwiLCBcXFwiQU5ZXFxcIn1cXG5cXG5fcGZfYWd2MnJrX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbl9wZl9hZ3Yycmtfb2socmspIGlmIHJrID09IFxcXCIkZGVmYXVsdFxcXCJcXG5cXG5fcGZfYWd2MnJrX29rKHJrKSBpZiB7XFxuXFx0cGFydHMgOj0gc3BsaXQocmssIFxcXCIgXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gMlxcblxcdHBhcnRzWzBdIGluIF9wZl9hZ3YycmtfbWV0aG9kc1xcblxcdHN0YXJ0c3dpdGgocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZUtleVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUm91dGVLZXkgJyVzJyBpcyBtYWxmb3JtZWQgZm9yIGFuIEhUVFAgQVBJOyB0aGUgcm91dGUgY3JlYXRlIGZhaWxzIHdpdGggJ1RoZSBwcm92aWRlZCByb3V0ZSBrZXkgaXMgbm90IGZvcm1hdHRlZCBwcm9wZXJseSBmb3IgSFRUUCBwcm90b2NvbC4gRm9ybWF0IHNob3VsZCBiZSBcXFxcXFxcIltIVFRQIE1FVEhPRF0gL1tSRVNPVVJDRSBQQVRIXVxcXFxcXFwiIG9yIFxcXFxcXFwiJGRlZmF1bHRcXFxcXFxcIidcXFwiLCBbcmtdKSxcXG5cXHRcXFwiVXNlIFxcXFxcXFwiTUVUSE9EIC9wYXRoXFxcXFxcXCIgd2l0aCBNRVRIT0Qgb25lIG9mIEdFVCBQT1NUIFBVVCBQQVRDSCBERUxFVEUgSEVBRCBPUFRJT05TIEFOWSwgb3IgJGRlZmF1bHRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1yb3V0ZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVxcXCIpXFxuXFx0X3BmX2FndjJya19odHRwX2FwaShuYW1lKVxcblxcdHJrIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVLZXlcXFwiKVxcblxcdGlzX3N0cmluZyhyaylcXG5cXHRub3QgX3BmX2FndjJya19vayhyaylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUtc2VsZWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJcyBhY2NlcHQgb25seSB0aGUgbWV0aG9kLXBhdGggcm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggc3BlbGxpbmdzIGRlcGxveS12ZXJpZmllZCBhcyBhY2NlcHRlZDogdGhlIGRvY3VtZW50ZWRcXG4jIFxcXCIkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aFxcXCIgYW5kIHRoZSBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIlxcbiMgZm9ybSB0aGUgc2VydmljZSBlcnJvciBpdHNlbGYgcHJpbnRzIChiZW5jaCB2MDJiKS5cXG5fcGZfYWd2Mmhyc19hbGxvd2VkIDo9IHtcXFwiJHJlcXVlc3QubWV0aG9kICRyZXF1ZXN0LnBhdGhcXFwiLCBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1zZWxlY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSFRUUCBBUEkgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZDsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCAnUm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb24gaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gXFxcXFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFxcXFxcIidcXFwiLCBbcnNlXSksXFxuXFx0XFxcIlVzZSAkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aCwgb3Igb21pdCB0aGUgcHJvcGVydHkgKEhUVFAgQVBJcyBkZWZhdWx0IHRvIGl0KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxuXFx0cnNlIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocnNlKVxcblxcdG5vdCByc2UgaW4gX3BmX2FndjJocnNfYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpXVCBhdXRob3JpemVycyBuZWVkIEp3dENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIEpXVCBhdXRob3JpemVyIGlzIG5vdGhpbmcgYnV0IGl0cyBpc3N1ZXIvYXVkaWVuY2UgY29uZmlnLCBzbyB0aGVcXG4jIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3YyamFjX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJKd3RDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Kd3RDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSldUIGF1dGhvcml6ZXIgaGFzIG5vIEp3dENvbmZpZ3VyYXRpb247IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSnd0Q29uZmlndXJhdGlvbiBtdXN0IG5vdCBiZSBudWxsIGZvciBKV1QgQXV0aG9yaXplclxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEp3dENvbmZpZ3VyYXRpb24gd2l0aCBJc3N1ZXIgYW5kIEF1ZGllbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIkpXVFxcXCJcXG5cXHRfcGZfYWd2MmphY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1yZXF1ZXN0LWF1dGhvcml6ZXItcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJFUVVFU1QgYXV0aG9yaXplcnMgb24gSFRUUCBBUElzIG5lZWQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVxdWlyZWQgb24gSFRUUCBBUElzIG9ubHkgLSBXZWJTb2NrZXQgUkVRVUVTVCBhdXRob3JpemVycyBtdXN0IE5PVCBzZXRcXG4jIGl0LCBzbyB0aGUgcnVsZSBmaXJlcyBzb2xlbHkgd2hlbiB0aGUgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUC5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJyYXBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxuX3BmX2FndjJyYXBfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLXJlcXVlc3QtYXV0aG9yaXplci1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0XFxcIlJFUVVFU1QgYXV0aG9yaXplciBvbiBhbiBIVFRQIEFQSSBoYXMgbm8gQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvbiBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgUkVRVUVTVCBhdXRob3JpemVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uIHRvIDEuMCBvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiUkVRVUVTVFxcXCJcXG5cXHRfcGZfYWd2MnJhcF9odHRwX2FwaShuYW1lKVxcblxcdF9wZl9hZ3YycmFwX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLXdlYnNvY2tldC1yb3V0ZS1zZWxlY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2ViU29ja2V0IEFQSXMgbmVlZCBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCBBUElzIHJvdXRlIGJ5IGV2YWx1YXRpbmcgdGhpcyBleHByZXNzaW9uIGFnYWluc3QgZWFjaCBtZXNzYWdlLFxcbiMgc28gdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3Yyd3JzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi13ZWJzb2NrZXQtcm91dGUtc2VsZWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLFxcblxcdFxcXCJXZWJTb2NrZXQgQVBJIGhhcyBubyBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb247IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbiwgZS5nLiAkcmVxdWVzdC5ib2R5LmFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIldFQlNPQ0tFVFxcXCJcXG5cXHRfcGZfYWd2Mndyc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWNvb2xkb3duLW5vbi1uZWdhdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvb2xkb3duIGNhbm5vdCBiZSBuZWdhdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ29vbGRvd24gaXMgYSBzdHJpbmcgaW4gdGhlIHNjaGVtYTsgb25seSB0aGUgc2VydmljZSBrbm93cyBpdCBpcyBhXFxuIyBub24tbmVnYXRpdmUgaW50ZWdlci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1jb29sZG93bi1ub24tbmVnYXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvb2xkb3duXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb29sZG93biAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxcXFxcXFwiXFxcIiwgW2NdKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29vbGRvd25cXFwiKSlcXG5cXHRjIDwgMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1kZXNpcmVkLWNhcGFjaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVzaXJlZENhcGFjaXR5IG11c3Qgc2l0IGJldHdlZW4gTWluU2l6ZSBhbmQgTWF4U2l6ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNpemVzIGFyZSBzdHJpbmctdHlwZWQgaW4gdGhlIHNjaGVtYTsgdGhlIGJldHdlZW4tcmVsYXRpb25zaGlwIGlzXFxuIyBhIHRocmVlLXdheSBjcm9zcy1wcm9wZXJ0eSBjaGVjay4gVGhlIG1pbj5tYXggcGFpciBpdHNlbGYgaXMgZW5naW5lXFxuIyB0ZXJyaXRvcnkgKEUzNzA2KSBhbmQgbm90IHJlcGVhdGVkIGhlcmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctZGVzaXJlZC1jYXBhY2l0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZXNpcmVkQ2FwYWNpdHkgJXYgaXMgb3V0c2lkZSBbJXYsICV2XTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVzaXJlZCBjYXBhY2l0eToldiBtdXN0IGJlIGJldHdlZW4gdGhlIHNwZWNpZmllZCBtaW4gc2l6ZToldiBhbmQgbWF4IHNpemU6JXZcXFxcXFxcIlxcXCIsIFtkYywgbW4sIG14LCBkYywgbW4sIG14XSksXFxuXFx0XFxcIktlZXAgTWluU2l6ZSA8PSBEZXNpcmVkQ2FwYWNpdHkgPD0gTWF4U2l6ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGRjIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2lyZWRDYXBhY2l0eVxcXCIpKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1pblNpemVcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhTaXplXFxcIikpXFxuXFx0bW4gPD0gbXhcXG5cXHRfcGZfYXNnZGNyX291dChkYywgbW4sIG14KVxcbn1cXG5cXG5fcGZfYXNnZGNyX291dChkYywgbW4sIF8pIGlmIGRjIDwgbW5cXG5cXG5fcGZfYXNnZGNyX291dChkYywgXywgbXgpIGlmIGRjID4gbXhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCBjYW5ub3QgYmUgbmVnYXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgaXQgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBubyBmbG9vcjsgemVybyBpcyB0aGVcXG4jIHNlcnZpY2UgZGVmYXVsdCwgc28gb25seSBuZWdhdGl2ZXMgYXJlIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctaGVhbHRoLWNoZWNrLWdyYWNlLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiR3JhY2UgcGVyaW9kIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxcXFxcXFwiXFxcIiwgW2ddKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGcgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIpKVxcblxcdGcgPCAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLW9uZGVtYW5kLXBlcmNlbnRhZ2UtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgdG9wcyBvdXQgYXQgMTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHBlcmNlbnRhZ2Ugc3BsaXQgY2Fubm90IGV4Y2VlZCAxMDA7IHRoZSBzY2hlbWEgaGFzIG5vIG1heGltdW0uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctb25kZW1hbmQtcGVyY2VudGFnZS1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1peGVkSW5zdGFuY2VzUG9saWN5Lkluc3RhbmNlc0Rpc3RyaWJ1dGlvbi5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgJXYgaXMgb3ZlciAxMDA7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIGEgcGVyY2VudGFnZSBiZXR3ZWVuIDAgYW5kIDEwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC1pbnN0YW5jZXNkaXN0cmlidXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kuSW5zdGFuY2VzRGlzdHJpYnV0aW9uLk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5XFxcIikpXFxuXFx0cCA+IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy10YXJnZXQtdmFsdWUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgdHJhY2tpbmcgbmVlZHMgYSBwb3NpdGl2ZSBUYXJnZXRWYWx1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZmxvb3IgaXMgZWZmZWN0aXZlbHkgXFxcInBvc2l0aXZlXFxcIiAoOC41ZS0xMik7IHplcm8gYW5kXFxuIyBuZWdhdGl2ZXMgYXJlIHJlamVjdGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLXRhcmdldC12YWx1ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLlRhcmdldFZhbHVlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYXJnZXRWYWx1ZSAldiBpcyBub3QgcG9zaXRpdmU7IHRoZSBwb2xpY3kgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJUYXJnZXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDguNTE1OTJFLTEyIGFuZCAxLjE3NDI3MUUxN1xcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIGEgcG9zaXRpdmUgdGFyZ2V0IHZhbHVlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctc2NhbGluZ3BvbGljeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVxcXCIpXFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRUcmFja2luZ0NvbmZpZ3VyYXRpb24uVGFyZ2V0VmFsdWVcXFwiKSlcXG5cXHR2IDw9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGdyb3VwIG5lZWRzIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBvciBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQbGFjZW1lbnQgbXVzdCBjb21lIGZyb20gc29tZXdoZXJlLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXNnenNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZQQ1pvbmVJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiTmVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgbm9yIFZQQ1pvbmVJZGVudGlmaWVyIGlzIHNldDsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiWW91IG11c3Qgc3BlY2lmeSAxIG9mIGVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgb3IgU3VibmV0c1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZQQ1pvbmVJZGVudGlmaWVyIHdpdGggdGhlIHRhcmdldCBzdWJuZXRzIChvciBBdmFpbGFiaWxpdHlab25lcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiQXZhaWxhYmlsaXR5Wm9uZXNcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJBdmFpbGFiaWxpdHlab25lSWRzXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiVlBDWm9uZUlkZW50aWZpZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWNlLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb21wdXRlIGVudmlyb25tZW50IG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWNlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVFbnZpcm9ubWVudE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXB1dGVFbnZpcm9ubWVudE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZUVudmlyb25tZW50TmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDEyOH0kYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1jZS12Y3B1cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1heHZDcHVzIG11c3QgYmUgYXQgbGVhc3QgTWludkNwdXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtY2UtdmNwdXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuTWF4dkNwdXNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heHZDcHVzICV2IGlzIGJlbG93IE1pbnZDcHVzICV2IChcXFxcXFxcIm1heHZDcHVzIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWludkNwdXMuXFxcXFxcXCIpXFxcIiwgW214LCBtbl0pLFxcblxcdFxcXCJLZWVwIE1pbnZDcHVzIDw9IE1heHZDcHVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRtbiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLk1pbnZDcHVzXFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5NYXh2Q3B1c1xcXCIpKVxcblxcdG14IDwgbW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgY29tcHV0ZSBlbnZpcm9ubWVudHMgY2Fubm90IHRha2UgQWxsb2NhdGlvblN0cmF0ZWd5IG9yIEluc3RhbmNlVHlwZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZjZl9jcihuYW1lKSA6PSBjciBpZiB7XFxuXFx0Y3IgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLlR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhjcilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLiVzXFxcIiwgW2ZpZWxkXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgbm90IGFwcGxpY2FibGUgZm9yICVzIGNvbXB1dGUgZW52aXJvbm1lbnRzOyBCYXRjaCByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtmaWVsZCwgY3JdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBFQzItb25seSBmaWVsZCwgb3Igc3dpdGNoIENvbXB1dGVSZXNvdXJjZXMuVHlwZSB0byBFQzIvU1BPVFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDb21wdXRlRW52aXJvbm1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFxcXCIpXFxuXFx0Y3IgOj0gX3BmX2JhdGNoZmNmX2NyKG5hbWUpXFxuXFx0Y3IgaW4ge1xcXCJGQVJHQVRFXFxcIiwgXFxcIkZBUkdBVEVfU1BPVFxcXCJ9XFxuXFx0Y3JlcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzXFxuXFx0aXNfb2JqZWN0KGNyZXMpXFxuXFx0c29tZSBmaWVsZCBpbiB7XFxcIkFsbG9jYXRpb25TdHJhdGVneVxcXCIsIFxcXCJJbnN0YW5jZVR5cGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KGNyZXMsIGZpZWxkLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBqb2IgZGVmaW5pdGlvbnMgbXVzdCB1c2UgYSBzdXBwb3J0ZWQgdkNQVS9tZW1vcnkgY29tYmluYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2hmY21fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9mYXJnYXRlLmh0bWxcXFwiXFxuXFxuIyBNZW1vcnkgc3BlYyBwZXIgdkNQVSB0aWVyOiAwLjI1IGlzIGFuIGV4cGxpY2l0IHNldDsgdGhlIHJlc3QgYXJlXFxuIyBbbWluLCBtYXgsIHN0ZXBdIGFyaXRobWV0aWMgcmFuZ2VzLiBLZXlzIGFyZSBudW1iZXJzIHNvIFxcXCIxLjBcXFwiIGFuZFxcbiMgXFxcIjFcXFwiIGJvdGggbGFuZCBvbiB0aGUgc2FtZSB0aWVyIGFmdGVyIHRvX251bWJlci5cXG5fcGZfYmF0Y2hmY21fc2V0IDo9IHs1MTIsIDEwMjQsIDIwNDh9XFxuXFxuX3BmX2JhdGNoZmNtX3JhbmdlIDo9IHswLjU6IFsxMDI0LCA0MDk2LCAxMDI0XSwgMTogWzIwNDgsIDgxOTIsIDEwMjRdLCAyOiBbNDA5NiwgMTYzODQsIDEwMjRdLCA0OiBbODE5MiwgMzA3MjAsIDEwMjRdLCA4OiBbMTYzODQsIDYxNDQwLCA0MDk2XSwgMTY6IFszMjc2OCwgMTIyODgwLCA4MTkyXX1cXG5cXG5fcGZfYmF0Y2hmY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSBwYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhdGZvcm1DYXBhYmlsaXRpZXNcXFwiKVxcblxcdHBjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fcmVxKG5hbWUsIHJ0eXBlKSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0b2JqZWN0LmdldChlbnRyeSwgXFxcIlR5cGVcXFwiLCBcXFwiXFxcIikgPT0gcnR5cGVcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHYgOj0gdG9fbnVtYmVyKHJhdylcXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0diA9PSAwLjI1XFxuXFx0bm90IG0gaW4gX3BmX2JhdGNoZmNtX3NldFxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHRzcGVjIDo9IF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcdG0gPCBzcGVjWzBdXFxufVxcblxcbl9wZl9iYXRjaGZjbV9iYWQodiwgbSkgaWYge1xcblxcdHNwZWMgOj0gX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFx0bSA+IHNwZWNbMV1cXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0c3BlYyA6PSBfcGZfYmF0Y2hmY21fcmFuZ2Vbdl1cXG5cXHQobSAtIHNwZWNbMF0pICUgc3BlY1syXSAhPSAwXFxufVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIHYgPT0gMC4yNVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzLlJlc291cmNlUmVxdWlyZW1lbnRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJWQ1BVICV2IGlzIG5vdCBhIEZhcmdhdGUgdGllciAoMC4yNSwgMC41LCAxLCAyLCA0LCA4LCAxNik7IEJhdGNoIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIC4uLiBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIHRoZSBGYXJnYXRlIHZDUFUgdGllcnNcXFwiLFxcblxcdF9wZl9iYXRjaGZjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdF9wZl9iYXRjaGZjbV9mYXJnYXRlKG5hbWUpXFxuXFx0diA6PSBfcGZfYmF0Y2hmY21fcmVxKG5hbWUsIFxcXCJWQ1BVXFxcIilcXG5cXHRub3QgX3BmX2JhdGNoZmNtX3RpZXIodilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1FTU9SWSAldiBNaUIgaXMgbm90IHZhbGlkIGZvciBWQ1BVICV2OyBCYXRjaCByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlc291cmNlIHJlcXVpcmVtZW50cyAoJXYgdkNQVSwgJXYgTWlCKSBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbbSwgdiwgdiwgbV0pLFxcblxcdFxcXCJQaWNrIGEgbWVtb3J5IHZhbHVlIGZyb20gdGhlIHRpZXIncyBzdXBwb3J0ZWQgbGlzdFxcXCIsXFxuXFx0X3BmX2JhdGNoZmNtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmNtX2ZhcmdhdGUobmFtZSlcXG5cXHR2IDo9IF9wZl9iYXRjaGZjbV9yZXEobmFtZSwgXFxcIlZDUFVcXFwiKVxcblxcdG0gOj0gX3BmX2JhdGNoZmNtX3JlcShuYW1lLCBcXFwiTUVNT1JZXFxcIilcXG5cXHRfcGZfYmF0Y2hmY21fYmFkKHYsIG0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgam9iIGRlZmluaXRpb25zIHJlcXVpcmUgRXhlY3V0aW9uUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZlcl9mYXJnYXRlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIpXFxuXFx0cGMudmFsdWUgPT0gXFxcIkZBUkdBVEVcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiUGxhdGZvcm1DYXBhYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgRXhlY3V0aW9uUm9sZUFybiBpcyBtaXNzaW5nIChcXFxcXFxcImV4ZWN1dGlvblJvbGVBcm4gaXMgcmVxdWlyZWQgZm9yIEZhcmdhdGUgam9icy5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJTZXQgQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVySm9iRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmVyX2ZhcmdhdGUobmFtZSlcXG5cXHRjcCA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KGNwKVxcblxcdG9iamVjdC5nZXQoY3AsIFxcXCJFeGVjdXRpb25Sb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIsXFxuXFx0XFxcIlR5cGUgbXVsdGlub2RlIGNhbm5vdCBydW4gb24gRmFyZ2F0ZSAoXFxcXFxcXCJGYXJnYXRlIGRvZXMgbm90IHN1cHBvcnQgTU5QIGpvYnNcXFxcXFxcIilcXFwiLFxcblxcdFxcXCJVc2UgRUMyIHBsYXRmb3JtIGNhcGFiaWxpdGllcyBmb3IgbXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvbXVsdGktbm9kZS1wYXJhbGxlbC1qb2JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwibXVsdGlub2RlXFxcIlxcblxcdHNvbWUgcGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIilcXG5cXHRwYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1qZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSm9iIGRlZmluaXRpb24gbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWpkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkpvYkRlZmluaXRpb25OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJKb2JEZWZpbml0aW9uTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSm9iRGVmaW5pdGlvbk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwxMjh9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtbWFuYWdlZC1jb21wdXRlLXJlc291cmNlc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1BTkFHRUQgY29tcHV0ZSBlbnZpcm9ubWVudHMgcmVxdWlyZSBDb21wdXRlUmVzb3VyY2VzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLW1hbmFnZWQtY29tcHV0ZS1yZXNvdXJjZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXNcXFwiLFxcblxcdFxcXCJUeXBlIE1BTkFHRUQgcmVxdWlyZXMgQ29tcHV0ZVJlc291cmNlcyAoXFxcXFxcXCJjb21wdXRlUmVzb3VyY2VzIG11c3QgYmUgcHJvdmlkZWQgZm9yIGEgTUFOQUdFRCBjb21wdXRlIGVudmlyb25tZW50XFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiQWRkIGEgQ29tcHV0ZVJlc291cmNlcyBibG9jaywgb3IgdXNlIFR5cGUgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTUFOQUdFRFxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZVJlc291cmNlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1xdWV1ZS1vcmRlci1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIG1heSBub3QgYmUgZW1wdHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIGFjY2VwdHMgYW4gZW1wdHkgbGlzdDsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdC4gVHJ1ZVxcbiMgYWJzZW5jZSBpcyBzY2hlbWEgdGVycml0b3J5LCBzbyBvbmx5IHRoZSBwcmVzZW50LWFuZC1lbXB0eSBzaGFwZVxcbiMgaXMgY2xhaW1lZCAoaW5wdXQucmVzb3VyY2VzIHNlZXMgdGhlIHJhdyBsaXN0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXF1ZXVlLW9yZGVyLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db21wdXRlRW52aXJvbm1lbnRPcmRlclxcXCIsXFxuXFx0XFxcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIGVtcHR5IChcXFxcXFxcImNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIHJlcXVpcmVkLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkxpc3QgYXQgbGVhc3Qgb25lIGNvbXB1dGUgZW52aXJvbm1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlSm9iUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvcmRlciA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KG9yZGVyKVxcblxcdGNvdW50KG9yZGVyKSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtcmV0cnktYXR0ZW1wdHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXRyeVN0cmF0ZWd5LkF0dGVtcHRzIG1heSBub3QgZXhjZWVkIDEwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1yZXRyeS1hdHRlbXB0c1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmV0cnlTdHJhdGVneS5BdHRlbXB0cyAldiBpcyBhYm92ZSB0aGUgbWF4aW11bSAoXFxcXFxcXCJSZXRyeUF0dGVtcHRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMC5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAxMCBhdHRlbXB0c1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIpKVxcblxcdG4gPiAxMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXRpbWVvdXQtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kcyBtdXN0IGJlIGF0IGxlYXN0IDYwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC10aW1lb3V0LW1pbmltdW1cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGltZW91dCAldiBzZWNvbmRzIGlzIGJlbG93IHRoZSBtaW5pbXVtIChcXFxcXFxcIkF0dGVtcHREdXJhdGlvblNlY29uZHMgaW4gVGltZW91dCBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHMuXFxcXFxcXCIpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IGxlYXN0IDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIpKVxcblxcdG4gPCA2MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXVubWFuYWdlZC1mYXJnYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVU5NQU5BR0VEIGNvbXB1dGUgZW52aXJvbm1lbnRzIGNhbm5vdCBiZSBGYXJnYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2h1bWZfY3IobmFtZSkgOj0gY3IgaWYge1xcblxcdGNyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5UeXBlXFxcIilcXG5cXHRpc19zdHJpbmcoY3IpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtdW5tYW5hZ2VkLWZhcmdhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuVHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHlwZSBVTk1BTkFHRUQgY2Fubm90IHBhaXIgd2l0aCBDb21wdXRlUmVzb3VyY2VzLlR5cGUgJXMgKFxcXFxcXFwiQ2Fubm90IGNyZWF0ZSBhbiBVTk1BTkFHRUQgRmFyZ2F0ZSBDb21wdXRlIEVudmlyb25tZW50LlxcXFxcXFwiKVxcXCIsIFtjcl0pLFxcblxcdFxcXCJVc2UgTUFOQUdFRCBmb3IgRmFyZ2F0ZSwgb3IgRUMyIHJlc291cmNlcyBmb3IgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVU5NQU5BR0VEXFxcIlxcblxcdGNyIDo9IF9wZl9iYXRjaHVtZl9jcihuYW1lKVxcblxcdGNyIGluIHtcXFwiRkFSR0FURVxcXCIsIFxcXCJGQVJHQVRFX1NQT1RcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2F0ZXdheXMgd2l0aCBBdXRob3JpemVyVHlwZSBDVVNUT01fSldUIHJlcXVpcmUgQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9nd2p3dF9oYXNfY29uZmlnKG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uXFxcIikpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hZ2VudGNvcmUtZ2F0ZXdheS1qd3QtYXV0aG9yaXplclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBdXRob3JpemVyVHlwZSBpcyBDVVNUT01fSldUIGJ1dCBBdXRob3JpemVyQ29uZmlndXJhdGlvbiBpcyBtaXNzaW5nOyB0aGUgQ3JlYXRlR2F0ZXdheSBBUEkgcmVxdWlyZXMgaXQgYW5kIHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggYSBWYWxpZGF0aW9uRXhjZXB0aW9uXFxcIixcXG5cXHRcXFwiQWRkIEF1dGhvcml6ZXJDb25maWd1cmF0aW9uLkN1c3RvbUpXVEF1dGhvcml6ZXIgKGRpc2NvdmVyeVVybCBhbmQgYWxsb3dlZEF1ZGllbmNlL2FsbG93ZWRDbGllbnRzKSwgb3Igc3dpdGNoIEF1dGhvcml6ZXJUeXBlIHRvIEFXU19JQU1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVHYXRld2F5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiQ1VTVE9NX0pXVFxcXCJcXG5cXHRub3QgX3BmX2d3and0X2hhc19jb25maWcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hZ2VudGNvcmUtcnVudGltZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWdlbnRDb3JlIFJ1bnRpbWUgbmFtZXMgbXVzdCBtYXRjaCBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSAobm8gaHlwaGVucylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIOOCueOCreODvOODnuOBryBBZ2VudFJ1bnRpbWVOYW1lIOOBruODkeOCv+ODvOODs+OCkuaMgeOBn+OBquOBhO+8iOOCqOODs+OCuOODs+e0oOmAmuOCiuOAgVxcbiMgMjAyNi0wOS0wMSDjgasgMS43LjAtYmV0YSDjgafnorroqo3vvInjgYzjgIFDcmVhdGVBZ2VudFJ1bnRpbWUgQVBJIOOBr1xcbiMgW2EtekEtWl1bYS16QS1aMC05X117MCw0N30g44KS5by35Yi244GZ44KL44CC44OP44Kk44OV44Oz5YWl44KK44GuIENESyDpoqjlkb3lkI3jgYzlrprnlarjga7mrbvlm6DjgIJcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFnZW50UnVudGltZU5hbWUgJyVzJyBpcyBpbnZhbGlkOiBpdCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcyAobWF4IDQ4IGNoYXJhY3RlcnMsIGh5cGhlbnMgYXJlIG5vdCBhbGxvd2VkKTsgQ3JlYXRlQWdlbnRSdW50aW1lIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGFuIHVuZGVyc2NvcmUtc2VwYXJhdGVkIG5hbWUgc3VjaCBhcyAnbXlfYWdlbnRfcnVudGltZSdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVBZ2VudFJ1bnRpbWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlcyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCByZXF1aXJlcyB0aGUgQUNNIGNlcnRpZmljYXRlIHRvIGJlIGluIHVzLWVhc3QtMSwgYnV0IHRoZSBjZXJ0aWZpY2F0ZSBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRcXFwiSXNzdWUgb3IgaW1wb3J0IHRoZSBjZXJ0aWZpY2F0ZSBpbiB1cy1lYXN0LTEgKGUuZy4gYSBkZWRpY2F0ZWQgdXMtZWFzdC0xIHN0YWNrKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NuYW1lcy1hbmQtaHR0cHMtcmVxdWlyZW1lbnRzLmh0bWwjaHR0cHMtcmVxdWlyZW1lbnRzLWNlcnRpZmljYXRlLWlzc3VlclxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzJdID09IFxcXCJhY21cXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hbGlhc2VzLXJlcXVpcmUtY3VzdG9tLWNlcnRpZmljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRpc3RyaWJ1dGlvbiB3aXRoIEFsaWFzZXMgY2Fubm90IHVzZSB0aGUgQ2xvdWRGcm9udCBkZWZhdWx0IGNlcnRpZmljYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9hbGlhc2NlcnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLXZpZXdlcmNlcnRpZmljYXRlLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9maXggOj0gXFxcIkF0dGFjaCBhbiBBQ00gY2VydGlmaWNhdGUgKEFjbUNlcnRpZmljYXRlQXJuLCB1cy1lYXN0LTEpIG9yIGFuIElBTSBjZXJ0aWZpY2F0ZSwgdG9nZXRoZXIgd2l0aCBTc2xTdXBwb3J0TWV0aG9kIGFuZCBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uXFxcIlxcblxcbl9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgOj0gY291bnQoWzEgfFxcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkFsaWFzZXNcXFwiKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0XFxcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcXFwiLFxcblxcdF9wZl9jZl9hbGlhc2NlcnRfZml4LCBfcGZfY2ZfYWxpYXNjZXJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdF9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgPiAwXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQ2xvdWRGcm9udERlZmF1bHRDZXJ0aWZpY2F0ZVxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBwb2xpY3kgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkNhY2hlUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZVBvbGljeUNvbmZpZy5OYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ2FjaGVQb2xpY3kuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZWRNZXRob2RzIG11c3QgYmUgYSBzdWJzZXQgb2YgQWxsb3dlZE1ldGhvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX21ldGhvZHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWNhY2hlYmVoYXZpb3IuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgQ2xvdWRGcm9udCBkZWZhdWx0cyBBbGxvd2VkTWV0aG9kcyB0byBHRVQvSEVBRCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBvbWl0dGVkLFxcbiMgc28gYW4gb21pdHRlZCBBbGxvd2VkTWV0aG9kcyBzdGlsbCBjb25zdHJhaW5zIHdoYXQgbWF5IGJlIGNhY2hlZC5cXG5fcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkFsbG93ZWRNZXRob2RzXFxcIiwgW1xcXCJHRVRcXFwiLCBcXFwiSEVBRFxcXCJdKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhY2hlZE1ldGhvZHNcXFwiLCBbYi5wYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiQ2FjaGVkTWV0aG9kcyBjb250YWlucyAlcywgd2hpY2ggaXMgbm90IGluIEFsbG93ZWRNZXRob2RzICV2XFxcIiwgW21ldGhvZCwgYWxsb3dlZF0pLFxcblxcdFxcXCJFdmVyeSBtZXRob2QgaW4gQ2FjaGVkTWV0aG9kcyBtdXN0IGFsc28gYXBwZWFyIGluIEFsbG93ZWRNZXRob2RzXFxcIixcXG5cXHRfcGZfY2ZfbWV0aG9kc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0Y2FjaGVkIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkNhY2hlZE1ldGhvZHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGNhY2hlZClcXG5cXHRhbGxvd2VkIDo9IF9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYilcXG5cXHRpc19hcnJheShhbGxvd2VkKVxcblxcdHNvbWUgbWV0aG9kIGluIGNhY2hlZFxcblxcdG5vdCBtZXRob2QgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2ZpeCA6PSBcXFwiQ3JlYXRlIHRoZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbiB1cy1lYXN0LTEgKGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiBkb2VzIHRoaXMgZm9yIHlvdSkgYW5kIGFzc29jaWF0ZSB0aGF0IHZlcnNpb24ncyBBUk5cXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWF0LWVkZ2UtZnVuY3Rpb24tcmVzdHJpY3Rpb25zLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0X3BmX2NmX2VkZ2VyZWdpb25fZml4LCBfcGZfY2ZfZWRnZXJlZ2lvbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDdcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBhc3NvY2lhdGlvbnMgbXVzdCByZWZlcmVuY2UgYSB2ZXJzaW9uIEFSTiwgbm90IGFuIGFsaWFzIG9yICRMQVRFU1RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfZml4IDo9IFxcXCJBc3NvY2lhdGUgYSB2ZXJzaW9uIEFSTiAoaW4gdGhlIENESywgZm4uY3VycmVudFZlcnNpb24uZWRnZUFybikgaW5zdGVhZCBvZiB0aGUgdW5xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBhbiBhbGlhcywgb3IgJExBVEVTVFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tbGFtYmRhZnVuY3Rpb25hc3NvY2lhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBMYW1iZGEgQVJOcyBzcGxpdCBpbnRvIDcgc2VnbWVudHMgd2hlbiB1bnF1YWxpZmllZFxcbiMgKGFybjpwYXJ0aXRpb246bGFtYmRhOnJlZ2lvbjphY2NvdW50OmZ1bmN0aW9uOm5hbWUpIGFuZCA4IHdoZW4gYSB2ZXJzaW9uIG9yXFxuIyBhbGlhcyBxdWFsaWZpZXIgaXMgYXBwZW5kZWQuIE9ubHkgYW4gYWxsLWRpZ2l0IHF1YWxpZmllciBpcyBhIHZlcnNpb24uXFxuX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKSA6PSBbe1xcXCJwYXRoXFxcIjogcGF0aCwgXFxcImFyblxcXCI6IGFybiwgXFxcInBhcnRzXFxcIjogcGFydHN9IHxcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHBhcnRzWzVdID09IFxcXCJmdW5jdGlvblxcXCJcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pXFxuXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCB0aGlzIEFSTiBoYXMgbm8gcXVhbGlmaWVyXFxcIixcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA3XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0ICclcycgaXMgYW4gYWxpYXMgb3IgJExBVEVTVFxcXCIsIFtxdWFsaWZpZXJdKSxcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA4XFxuXFx0cXVhbGlmaWVyIDo9IGl0LnBhcnRzWzddXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHF1YWxpZmllcilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPcmlnaW4gZ3JvdXAgbWVtYmVycyBtdXN0IHJlZmVyZW5jZSBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gdGhlIGRpc3RyaWJ1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpIDo9IHtpZCB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbnNcXFwiKVxcblxcdGlkIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlkKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtcy4lZC5NZW1iZXJzXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJPcmlnaW4gZ3JvdXAgbWVtYmVyICclcycgZG9lcyBub3QgbWF0Y2ggYW55IG9yaWdpbiBJZCBpbiB0aGUgZGlzdHJpYnV0aW9uXFxcIiwgW29pZF0pLFxcblxcdFxcXCJQb2ludCBldmVyeSBvcmlnaW4gZ3JvdXAgbWVtYmVyIGF0IHRoZSBJZCBvZiBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gT3JpZ2luc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXNcXFwiKVxcblxcdG1lbWJlcnMgOj0gb2JqZWN0LmdldChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJNZW1iZXJzXFxcIiwge30pLCBcXFwiSXRlbXNcXFwiLCBbXSlcXG5cXHRzb21lIG0gaW4gbWVtYmVyc1xcblxcdG9pZCA6PSBvYmplY3QuZ2V0KG0sIFxcXCJPcmlnaW5JZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKG9pZClcXG5cXHRub3Qgb2lkIGluIF9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGUgYmVoYXZpb3IgVFRMcyBtdXN0IHNhdGlzZnkgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl90dGxfZml4IDo9IFxcXCJPcmRlciB0aGUgVFRMcyBhcyBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcXFwiXFxuXFxuX3BmX2NmX3R0bF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFttbiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBteFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIERlZmF1bHRUVEwgKCV2KVxcXCIsIFttbiwgZGZdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gZGZcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZWZhdWx0VFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbZGYsIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRkZiA+IG14XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgV0FGdjIgd2ViIEFDTCBhdHRhY2hlZCB0byBDbG91ZEZyb250IG11c3QgYmUgZ2xvYmFsbHkgc2NvcGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBXQUZ2MiBBUk4gY2FycmllcyBpdHMgc2NvcGUgaW4gdGhlIHJlc291cmNlIHNlZ21lbnQ6XFxuIyAgIGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL25hbWUvaWQgICAgKENMT1VERlJPTlQpXFxuIyAgIGFybjphd3M6d2FmdjI6YXAtbm9ydGhlYXN0LTE6MTIzNDU2Nzg5MDEyOnJlZ2lvbmFsL3dlYmFjbC8uLi4gKFJFR0lPTkFMKVxcbiMgQ2xvdWRGcm9udCBhY2NlcHRzIG9ubHkgdGhlIGdsb2JhbCBmb3JtLiBDaGVja2luZyB0aGUgcmVnaW9uIGFsb25lIHdvdWxkIG1pc3NcXG4jIGEgUkVHSU9OQUwgd2ViIEFDTCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdXMtZWFzdC0xLCB3aGljaCBpc1xcbiMgdGhlIGVhc3kgbWlzdGFrZSB0byBtYWtlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCBvbmx5IGFjY2VwdHMgYSBnbG9iYWxseSBzY29wZWQgd2ViIEFDTCwgYnV0IHRoaXMgQVJOIGlzIHNjb3BlZCAnJXMnXFxcIiwgW3Njb3BlXSksXFxuXFx0XFxcIkNyZWF0ZSB0aGUgd2ViIEFDTCB3aXRoIHNjb3BlIENMT1VERlJPTlQgaW4gdXMtZWFzdC0xICh3YWZ2Mi5DZm5XZWJBQ0wgd2l0aCBzY29wZTogJ0NMT1VERlJPTlQnKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utd2FmdjItd2ViYWNsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwid2FmdjJcXFwiXFxuXFx0c2VnbWVudHMgOj0gc3BsaXQocGFydHNbNV0sIFxcXCIvXFxcIilcXG5cXHRzY29wZSA6PSBzZWdtZW50c1swXVxcblxcdHNjb3BlICE9IFxcXCJnbG9iYWxcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1hbGFybS1wZXJpb2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBQZXJpb2QgYXMgYSBiYXJlIGludGVnZXI7IHRoZSB2YWxpZCB2YWx1ZXMgYXJlXFxuIyBvbmx5IGluIHRoZSBzZXJ2aWNlIChcXFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXFxcIikuXFxuIyBUaGUgc2FtZSBjb25zdHJhaW50IGFwcGxpZXMgaW5zaWRlIE1ldHJpY1N0YXQgKGJlbmNoIHcxMSwgMjAyNi0wOS0wMykuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQZXJpb2QgJXYgaXMgaW52YWxpZDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIDEwLCAyMCwgMzAsIG9yIGEgbXVsdGlwbGUgb2YgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIikpXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNzIChNZXRyaWNTdGF0LlBlcmlvZCBvZiBxdWVyeSAlZClcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIk1ldHJpY1N0YXQgUGVyaW9kICV2IGlzIGludmFsaWQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFxcXFxcIlxcXCIsIFtwXSksXFxuXFx0XFxcIlVzZSAxMCwgMjAsIDMwLCBvciBhIG11bHRpcGxlIG9mIDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKVxcblxcdGkgOj0gaXRlbS5pbmRleFxcblxcdHEgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChxKVxcblxcdHAgOj0gb2JqZWN0LmdldChxLCBbXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiUGVyaW9kXFxcIl0sIG51bGwpXFxuXFx0aXNfbnVtYmVyKHApXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhbmRhcmQgb3BlcmF0b3JzIG5lZWQgVGhyZXNob2xkLCByYW5nZSBvcGVyYXRvcnMgbmVlZCBUaHJlc2hvbGRNZXRyaWNJZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jd2F0aF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCJcXG5cXG4jIFRoZSB0d28gcmFuZ2Ugb3BlcmF0b3JzIGFuY2hvciB0byBhbiBhbm9tYWx5LWRldGVjdGlvbiBiYW5kIHZpYVxcbiMgVGhyZXNob2xkTWV0cmljSWQ7IGV2ZXJ5IG90aGVyIG9wZXJhdG9yIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZC4gQWJzZW5jZVxcbiMgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2N3YXRoX3JhbmdlX29wcyA6PSB7XFxcIkxlc3NUaGFuTG93ZXJPckdyZWF0ZXJUaGFuVXBwZXJUaHJlc2hvbGRcXFwiLCBcXFwiTGVzc1RoYW5Mb3dlclRocmVzaG9sZFxcXCIsIFxcXCJHcmVhdGVyVGhhblVwcGVyVGhyZXNob2xkXFxcIn1cXG5cXG5fcGZfY3dhdGhfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXBhcmlzb25PcGVyYXRvciAnJXMnIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZCBidXQgbm9uZSBpcyBzZXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQdXRNZXRyaWNBbGFybSByZXF1ZXN0IHNob3VsZCBoYXZlIHZhbGlkIFRocmVzaG9sZCBwYXJhbWV0ZXJcXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJTZXQgVGhyZXNob2xkLCBvciBzd2l0Y2ggdG8gYW4gYW5vbWFseS1kZXRlY3Rpb24gb3BlcmF0b3Igd2l0aCBUaHJlc2hvbGRNZXRyaWNJZFxcXCIsXFxuXFx0X3BmX2N3YXRoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0b3AgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wYXJpc29uT3BlcmF0b3JcXFwiKVxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3Qgb3AgaW4gX3BmX2N3YXRoX3JhbmdlX29wc1xcblxcdF9wZl9jd2F0aF9hYnNlbnQobmFtZSwgXFxcIlRocmVzaG9sZFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRocmVzaG9sZE1ldHJpY0lkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb21wYXJpc29uT3BlcmF0b3IgJyVzJyBpcyBhIHJhbmdlIG9wZXJhdG9yIGJ1dCBUaHJlc2hvbGRNZXRyaWNJZCBpcyBub3Qgc2V0OyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiQ29tcGFyaXNvbk9wZXJhdG9ycyBmb3IgcmFuZ2VzIHJlcXVpcmUgVGhyZXNob2xkTWV0cmljSWQgdG8gYmUgc2V0XFxcXFxcXCJcXFwiLCBbb3BdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgdGhlIEFOT01BTFlfREVURUNUSU9OX0JBTkQgcXVlcnkgaWQsIG9yIHVzZSBhIHN0YXRpYy10aHJlc2hvbGQgb3BlcmF0b3JcXFwiLFxcblxcdF9wZl9jd2F0aF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG9wIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcGFyaXNvbk9wZXJhdG9yXFxcIilcXG5cXHRvcCBpbiBfcGZfY3dhdGhfcmFuZ2Vfb3BzXFxuXFx0X3BmX2N3YXRoX2Fic2VudChuYW1lLCBcXFwiVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBbGFybVJ1bGUgbXVzdCBzdGFydCB3aXRoIGEgdmFsaWQgZXhwcmVzc2lvbiB0b2tlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpDb21wb3NpdGVBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgbmFtZXMgdGhlIG9ubHkgdG9rZW5zIGEgcnVsZSBleHByZXNzaW9uIG1heSBzdGFydCB3aXRoOyB0aGlzXFxuIyBjaGVja3MganVzdCB0aGF0IGZpcnN0IHRva2VuIOKAlCBhIGZ1bGwgZ3JhbW1hciBpcyBvdXQgb2Ygc2NvcGUuIEZ1bmN0aW9uXFxuIyB0b2tlbnMgdGFrZSBhbiBhcmd1bWVudCBsaXN0LCBrZXl3b3JkcyBzdGFuZCBhbG9uZS5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiKFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk5PVCBcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJOT1QoXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQVRfTEVBU1RcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJUUlVFXFxcIlxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJGQUxTRVxcXCJcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQUxBUk0oXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiT0soXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiSU5TVUZGSUNJRU5UX0RBVEEoXFxcIilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGFybVJ1bGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsYXJtUnVsZSAnJXMnIGRvZXMgbm90IHN0YXJ0IHdpdGggYSB2YWxpZCB0b2tlbjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiRXJyb3IgaW4gQWxhcm1SdWxlIFtVbnN1cHBvcnRlZCB0b2tlbiAuLi4gbXVzdCBiZTogJygnLCAnTk9UJywgQVRfTEVBU1QsIFRSVUUgb3IgRkFMU0UsIEFMQVJNLCBPSywgb3IgSU5TVUZGSUNJRU5UX0RBVEFdXFxcXFxcXCJcXFwiLCBbZXhwcl0pLFxcblxcdFxcXCJTdGFydCB0aGUgcnVsZSB3aXRoIEFMQVJNKC4uLiksIE9LKC4uLiksIElOU1VGRklDSUVOVF9EQVRBKC4uLiksIE5PVCwgQVRfTEVBU1QsIFRSVUUsIEZBTFNFLCBvciBhIHBhcmVudGhlc2l6ZWQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9DcmVhdGVfQ29tcG9zaXRlX0FsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXFxcIilcXG5cXHRleHByIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxhcm1SdWxlXFxcIilcXG5cXHRpc19zdHJpbmcoZXhwcilcXG5cXHR0IDo9IHRyaW1fc3BhY2UoZXhwcilcXG5cXHR0ICE9IFxcXCJcXFwiXFxuXFx0bm90IF9wZl9jd2Nhc192YWxpZF9zdGFydCh0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLWJvZHktanNvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkQm9keSBtdXN0IGJlIHZhbGlkIEpTT05cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1ib2R5LWpzb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGRvZXMgbm90IHBhcnNlIGFzIEpTT047IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGZpZWxkIERhc2hib2FyZEJvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJGaXggdGhlIEpTT04gc3ludGF4IG9mIHRoZSBkYXNoYm9hcmQgYm9keVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0bm90IGpzb24uaXNfdmFsaWQoYm9keSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmQgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXh0cmEgcGFpbmZ1bCBhdCBkZXBsb3kgdGltZTogdGhlIGludmFsaWQgbmFtZSBhbHNvIGJyZWFrcyB0aGUgcm9sbGJhY2tcXG4jIERFTEVURSwgbGVhdmluZyB0aGUgc3RhY2sgaW4gUk9MTEJBQ0tfRkFJTEVEIChiZW5jaGVkKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRhc2hib2FyZE5hbWUgJyVzJyBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM7IFB1dERhc2hib2FyZCBhbGxvd3Mgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoICgtKSBhbmQgdW5kZXJzY29yZSAoXyksIGFuZCB0aGUgZmFpbGVkIHN0YWNrIGNhbm5vdCBldmVuIHJvbGwgYmFjayBjbGVhbmx5XFxcIiwgW2RuXSksXFxuXFx0XFxcIlVzZSBvbmx5IGxldHRlcnMsIGRpZ2l0cywgZGFzaCBhbmQgdW5kZXJzY29yZSBpbiB0aGUgZGFzaGJvYXJkIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXREYXNoYm9hcmQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRkbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05Xy1dKyRgLCBkbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXQtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBkYXNoYm9hcmQgd2lkZ2V0IHJlcXVpcmVzIHR5cGUgYW5kIHByb3BlcnRpZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IGtleSBwcmVzZW5jZSBpcyBjaGVja2VkOiB0aGUgc2VydmljZSBhY2NlcHRzIGFyYml0cmFyeSB0eXBlIHZhbHVlc1xcbiMgKGJlbmNoIGR3MDQsIHR5cGUgXFxcIm1ldHJpY2NcXFwiIGRlcGxveWVkIGNsZWFuKSwgc28gbm8gZW51bSB2YWxpZGF0aW9uLlxcbl9wZl9jd2R3Zl93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1maWVsZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keSAod2lkZ2V0c1slZF0pXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJEYXNoYm9hcmQgd2lkZ2V0ICVkIGlzIG1pc3NpbmcgJyVzJzsgUHV0RGFzaGJvYXJkIGZhaWxzIHdpdGggXFxcXFxcXCJTaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJXMnXFxcXFxcXCJcXFwiLCBbaSwga2V5LCBrZXldKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSB3aWRnZXQgYSB0eXBlIGFuZCBhIHByb3BlcnRpZXMgb2JqZWN0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9DbG91ZFdhdGNoLURhc2hib2FyZC1Cb2R5LVN0cnVjdHVyZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdHNvbWUgaSwgdyBpbiBfcGZfY3dkd2Zfd2lkZ2V0cyhuYW1lKVxcblxcdGlzX29iamVjdCh3KVxcblxcdHNvbWUga2V5IGluIHtcXFwidHlwZVxcXCIsIFxcXCJwcm9wZXJ0aWVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHcsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkIHdpZGdldCB4IHRvcHMgb3V0IGF0IDIzIGFuZCB3aWR0aCBhdCAyNFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIHR3byBiZW5jaGVkIG1heGltYSBhcmUgY2xhaW1lZCAoeCA8PSAyMywgd2lkdGggPD0gMjQpLlxcbl9wZl9jd2R3cF93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG5fcGZfY3dkd3BfbWF4IDo9IHtcXFwieFxcXCI6IDIzLCBcXFwid2lkdGhcXFwiOiAyNH1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5ICh3aWRnZXRzWyVkXS4lcylcXFwiLCBbaSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiRGFzaGJvYXJkIHdpZGdldCAlZCBoYXMgJXM9JXYsIGFib3ZlIHRoZSBtYXhpbXVtICV2OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBiZSA8PSAldlxcXFxcXFwiXFxcIiwgW2ksIGtleSwgdiwgbSwgbV0pLFxcblxcdFxcXCJLZWVwIHggd2l0aGluIDAtMjMgYW5kIHdpZHRoIHdpdGhpbiAxLTI0ICgyNC1jb2x1bW4gZ3JpZClcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0c29tZSBpLCB3IGluIF9wZl9jd2R3cF93aWRnZXRzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KHcpXFxuXFx0c29tZSBrZXksIG0gaW4gX3BmX2N3ZHdwX21heFxcblxcdHYgOj0gb2JqZWN0LmdldCh3LCBrZXksIDApXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA+IG1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmRCb2R5IHJlcXVpcmVzIGEgd2lkZ2V0cyBhcnJheVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGhhcyBubyAnd2lkZ2V0cycga2V5OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICd3aWRnZXRzJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgd2lkZ2V0cyBhcnJheSB0byB0aGUgZGFzaGJvYXJkIGJvZHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0Ym9keSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiKVxcblxcdGlzX3N0cmluZyhib2R5KVxcblxcdGpzb24uaXNfdmFsaWQoYm9keSlcXG5cXHRvYmogOj0ganNvbi51bm1hcnNoYWwoYm9keSlcXG5cXHRpc19vYmplY3Qob2JqKVxcblxcdG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBub3QgZXhjZWVkIEV2YWx1YXRpb25QZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiLFxcblxcdHNwcmludGYoXFxcIkRhdGFwb2ludHNUb0FsYXJtICgldikgZXhjZWVkcyBFdmFsdWF0aW9uUGVyaW9kcyAoJXYpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRXZhbHVhdGlvblBlcmlvZHNcXFxcXFxcIlxcXCIsIFtkLCBldl0pLFxcblxcdFxcXCJMb3dlciBEYXRhcG9pbnRzVG9BbGFybSB0byBhdCBtb3N0IEV2YWx1YXRpb25QZXJpb2RzLCBvciByYWlzZSBFdmFsdWF0aW9uUGVyaW9kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdGQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiKSlcXG5cXHRldiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmFsdWF0aW9uUGVyaW9kc1xcXCIpKVxcblxcdGQgPiBldlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZXh0ZW5kZWQtc3RhdGlzdGljXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHBlcmNlbnRpbGUgc3RhdGlzdGljIGNhbm5vdCBleGNlZWQgcDEwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGVyY2VudGlsZSBzdGF0aXN0aWNzIHJ1biBwMC4wIHRvIHAxMDAuIE9ubHkgdGhlIHBOIGZvcm0gaXMgY2hlY2tlZDsgb3RoZXJcXG4jIGV4dGVuZGVkIGZvcm1zICh0bSwgd20sIHRjLCB0cywgLi4uKSBoYXZlIHRoZWlyIG93biBncmFtbWFycyBhbmQgd2VyZSBub3RcXG4jIG1lYXN1cmVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1leHRlbmRlZC1zdGF0aXN0aWNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFeHRlbmRlZFN0YXRpc3RpYyAnJXMnIGlzIGJleW9uZCBwMTAwOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIHZhbHVlICVzIGZvciBwYXJhbWV0ZXIgRXh0ZW5kZWRTdGF0aXN0aWMgaXMgbm90IHN1cHBvcnRlZC5cXFxcXFxcIlxcXCIsIFtzLCBzXSksXFxuXFx0XFxcIlVzZSBhIHBlcmNlbnRpbGUgYmV0d2VlbiBwMC4wIGFuZCBwMTAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L21vbml0b3JpbmcvY2xvdWR3YXRjaF9jb25jZXB0cy5odG1sI1BlcmNlbnRpbGVzXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIilcXG5cXHRpc19zdHJpbmcocylcXG5cXHRzdGFydHN3aXRoKHMsIFxcXCJwXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihzdWJzdHJpbmcocywgMSwgY291bnQocykgLSAxKSlcXG5cXHRuID4gMTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtbmFtZXNwYWNlLWFzY2lpXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZXRyaWMgbmFtZXNwYWNlcyBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1uYW1lc3BhY2UtYXNjaWlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVzcGFjZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmFtZXNwYWNlICclcycgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnM7IENsb3VkV2F0Y2ggcmVqZWN0cyB0aGUgYWxhcm0gd2l0aCBcXFxcXFxcIk5hbWVzcGFjZSBtdXN0IG5vdCBjb250YWluIE5vbi1BU0NJSSBjaGFyYWN0ZXJzLlxcXFxcXFwiXFxcIiwgW25zXSksXFxuXFx0XFxcIlVzZSBBU0NJSSBvbmx5IGluIHRoZSBtZXRyaWMgbmFtZXNwYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0TWV0cmljQWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZXNwYWNlXFxcIilcXG5cXHRpc19zdHJpbmcobnMpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW1xcXFx4MDAtXFxcXHg3Zl0qJGAsIG5zKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHBlciBxdWVyeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIHF1ZXJ5IGVudHJ5IGlzIGVpdGhlciBhIG1hdGggZXhwcmVzc2lvbiBvciBhIG1ldHJpYyBmZXRjaCwgbmV2ZXIgYm90aC5cXG4jIFRoZSBzcGVjaWZ5LW5laXRoZXIgc2hhcGUgZmFpbHMgdG9vLCBidXQgd2l0aCBhbiB1bnJlbGF0ZWQgZXJyb3IgKFxcXCJQZXJpb2RcXG4jIG11c3Qgbm90IGJlIG51bGxcXFwiLCBiZW5jaCB3MDNiKSDigJQgc28gb25seSB0aGUgYm90aC1zZXQgZGlyZWN0aW9uIGlzIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTWV0cmljcy4lZFxcXCIsIFtxLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTWV0cmljIHF1ZXJ5ICclcycgc2V0cyBib3RoIEV4cHJlc3Npb24gYW5kIE1ldHJpY1N0YXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVycyBNZXRyaWNEYXRhUXVlcnkgRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCB5b3UgaGF2ZSBzcGVjaWZpZWQgYm90aC5cXFxcXFxcIlxcXCIsIFtxaWRdKSxcXG5cXHRcXFwiS2VlcCB0aGUgRXhwcmVzc2lvbiBhbmQgZHJvcCBNZXRyaWNTdGF0IChmZXRjaCB0aGUgaW5wdXRzIGluIHNlcGFyYXRlIHF1ZXJpZXMpLCBvciB2aWNlIHZlcnNhXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0c29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIilcXG5cXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJFeHByZXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0cWlkIDo9IG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIklkXFxcIiwgXFxcIjxxdWVyeT5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LXJldHVybmRhdGFcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4YWN0bHkgb25lIG1ldHJpYyBxdWVyeSBtdXN0IHJldHVybiBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbiBhbGFybSBvbiBhIE1ldHJpY3MgYXJyYXkgbmVlZHMgZXhhY3RseSBvbmUgcXVlcnkgcmV0dXJuaW5nIGRhdGEuXFxuIyBSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUgd2hlbiBhYnNlbnQgKGJlbmNoIHcwNGIpLCBhbmQgZXhwbGljaXQgZmFsc2VcXG4jIGV2ZXJ5d2hlcmUgaXMgcmVqZWN0ZWQgdG9vICh3MDRjKS4gQSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIG1ha2VzIHRoZSBjb3VudCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2N3bXFyX2NvdW50YWJsZShxKSBpZiBpc19ib29sZWFuKG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBudWxsKSlcXG5cXG5fcGZfY3dtcXJfcmV0dXJucyhxKSBpZiBvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgb2YgdGhlIG1ldHJpYyBxdWVyaWVzIHJldHVybiBkYXRhIChSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRXhhY3RseSBvbmUgZWxlbWVudCBvZiB0aGUgbWV0cmljcyBsaXN0IHNob3VsZCByZXR1cm4gZGF0YS5cXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBSZXR1cm5EYXRhOiBmYWxzZSBvbiBldmVyeSBxdWVyeSBleGNlcHQgdGhlIG9uZSB0aGUgYWxhcm0gc2hvdWxkIHdhdGNoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0aXRlbXMgOj0gW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgcSBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfb2JqZWN0KHEudmFsdWUpXFxuXFx0XFx0X3BmX2N3bXFyX2NvdW50YWJsZShxLnZhbHVlKVxcblxcdH1cXG5cXHRuIDo9IGNvdW50KFtxIHwgc29tZSBxIGluIGl0ZW1zOyBfcGZfY3dtcXJfcmV0dXJucyhxLnZhbHVlKV0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC10aHJlc2hvbGQtbWV0cmljLWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaHJlc2hvbGRNZXRyaWNJZCBtdXN0IG1hdGNoIGEgbWV0cmljIHF1ZXJ5IHRoYXQgcmV0dXJucyBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYXRjaGluZyBtZWFucyBJZCBlcXVhbGl0eSBBTkQgZWZmZWN0aXZlIFJldHVybkRhdGEgdHJ1ZSAoZGVmYXVsdCB0cnVlLFxcbiMgYmVuY2ggdzA0Yik7IHcxMiBwcm92ZWQgYW4gSWQgbWF0Y2ggd2l0aCBSZXR1cm5EYXRhIGZhbHNlIGRvZXMgbm90IGNvdW50LlxcbiMgT25seSBuID09IDAgZmlyZXMgLSB0aGUgZHVwbGljYXRlLW1hdGNoIHNpZGUgaXMgdW5iZW5jaGVkLiBRdWVyaWVzIHdpdGhcXG4jIHVucmVzb2x2YWJsZSBJZC9SZXR1cm5EYXRhIG1ha2UgdGhlIGNvdW50IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9jd3RtaV9jb3VudGFibGUocSkgaWYgb2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfY3d0bWlfY291bnRhYmxlKHEpIGlmIGlzX2Jvb2xlYW4ob2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIG51bGwpKVxcblxcbl9wZl9jd3RtaV9tYXRjaGVzKHEsIHRtaWQpIGlmIHtcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJJZFxcXCIsIG51bGwpID09IHRtaWRcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtdGhyZXNob2xkLW1ldHJpYy1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIk5vIG1ldHJpYyBxdWVyeSB3aXRoIElkICclcycgcmV0dXJucyBkYXRhOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiTWV0cmljcyBsaXN0IG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBtZXRyaWMgbWF0Y2hpbmcgdGhlIFRocmVzaG9sZE1ldHJpY0lkIHBhcmFtZXRlclxcXFxcXFwiXFxcIiwgW3RtaWRdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgYSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIHRydWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHR0bWlkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcblxcdGlzX3N0cmluZyh0bWlkKVxcblxcdGl0ZW1zIDo9IFtxIHwgc29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IHEgaW4gaXRlbXMge1xcblxcdFxcdGlzX29iamVjdChxLnZhbHVlKVxcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpKVxcblxcdFxcdF9wZl9jd3RtaV9jb3VudGFibGUocS52YWx1ZSlcXG5cXHR9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gaXRlbXM7IF9wZl9jd3RtaV9tYXRjaGVzKHEudmFsdWUsIHRtaWQpXSkgPT0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbGlhc0F0dHJpYnV0ZXMgYW5kIFVzZXJuYW1lQXR0cmlidXRlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBLZXkgcHJlc2VuY2UgaXMgdGhlIHZpb2xhdGlvbiByZWdhcmRsZXNzIG9mIHZhbHVlcywgc28gdGhpcyBjaGVja3MgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgZGlyZWN0bHkgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dhdWVfc2V0KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Vc2VybmFtZUF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJCb3RoIEFsaWFzQXR0cmlidXRlcyBhbmQgVXNlcm5hbWVBdHRyaWJ1dGVzIGFyZSBzZXQ7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiT25seSBvbmUgb2YgdGhlIGFsaWFzQXR0cmlidXRlcyBvciB1c2VybmFtZUF0dHJpYnV0ZXMgY2FuIGJlIHNldCBpbiBhIFVzZXIgcG9vbC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIktlZXAgb25lOiBhbGlhc2VzIGZvciBzaWduLWluIGFsdGVybmF0aXZlcywgb3IgdXNlcm5hbWUgYXR0cmlidXRlcyB0byByZXBsYWNlIHVzZXJuYW1lc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJBbGlhc0F0dHJpYnV0ZXNcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJVc2VybmFtZUF0dHJpYnV0ZXNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LWNyZWRlbnRpYWxzLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY2xpZW50X2NyZWRlbnRpYWxzIGNhbm5vdCBjb21iaW5lIHdpdGggY29kZSBvciBpbXBsaWNpdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWFjaGluZS10by1tYWNoaW5lIGFuZCB1c2VyLWZhY2luZyBncmFudHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvbiBvbmVcXG4jIGNsaWVudC5cXG5fcGZfY29nY2NlX2Zsb3dzKG5hbWUpIDo9IHtmLnZhbHVlIHwgc29tZSBmIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIpfVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3MgY29tYmluZXMgY2xpZW50X2NyZWRlbnRpYWxzIHdpdGggJyVzJzsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IGNhbiBub3QgYmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCBjb2RlIGZsb3cgb3IgaW1wbGljaXQgZmxvdy5cXFxcXFxcIlxcXCIsIFtvdGhlcl0pLFxcblxcdFxcXCJTcGxpdCB0aGUgZmxvd3MgYWNyb3NzIHNlcGFyYXRlIHVzZXIgcG9vbCBjbGllbnRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Zmxvd3MgOj0gX3BmX2NvZ2NjZV9mbG93cyhuYW1lKVxcblxcdFxcXCJjbGllbnRfY3JlZGVudGlhbHNcXFwiIGluIGZsb3dzXFxuXFx0c29tZSBvdGhlciBpbiB7XFxcImNvZGVcXFwiLCBcXFwiaW1wbGljaXRcXFwifVxcblxcdG90aGVyIGluIGZsb3dzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjbGllbnRfY3JlZGVudGlhbHMgbmVlZHMgYSBjbGllbnQgc2VjcmV0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYWNoaW5lLXRvLW1hY2hpbmUgYXV0aCBpcyBzZWNyZXQtYmFzZWQuIEdlbmVyYXRlU2VjcmV0IGRlZmF1bHRzIHRvXFxuIyBmYWxzZSwgc28gYm90aCB0aGUgbGl0ZXJhbCBmYWxzZSBhbmQgdGhlIGFic2VudCBrZXkgbGVhdmUgdGhlIGNsaWVudFxcbiMgc2VjcmV0bGVzcy4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWVcXG4jIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJHZW5lcmF0ZVNlY3JldFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYgY29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIpKSA9PSBmYWxzZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIsXFxuXFx0XFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IG9uIGEgY2xpZW50IHdpdGhvdXQgYSBzZWNyZXQ7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJjbGllbnRfY3JlZGVudGlhbHMgZmxvdyBjYW4gbm90IGJlIHNlbGVjdGVkIGlmIGNsaWVudCBkb2VzIG5vdCBoYXZlIGEgY2xpZW50IHNlY3JldC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBHZW5lcmF0ZVNlY3JldDogdHJ1ZSBvbiB0aGlzIGNsaWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcblxcdGYudmFsdWUgPT0gXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCJcXG5cXHRfcGZfY29nY2NzX25vX3NlY3JldChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlVzZXIgcG9vbCBjbGllbnQgbmFtZXMgYWxsb3cgb25seSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKz0sLkAtXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbGllbnROYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvLXVzZXItaWRlbnRpdHktcG9vbHMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVXNlclBvb2xDbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XyBcXFxcdCs9LC5ALV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRG9tYWluIHByZWZpeGVzIGNhbm5vdCBjb250YWluIHJlc2VydmVkIHdvcmRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSByZWZ1c2VzIHByZWZpeGVzIHdpdGggYSByZXNlcnZlZCB3b3JkIGFzIGEgaHlwaGVuLWRlbGltaXRlZFxcbiMgdG9rZW4sIHdpdGggb25seSBhIGdlbmVyaWMgZXJyb3IuIFBpbm5lZCBieSBjb250cm9sbGVkIHBhaXJzOiAtYXdzLSAvXFxuIyAtYW1hem9uLSAvIC1jb2duaXRvLSBmYWlsIHdoaWxlIC1hd3NvbWUtIGRlcGxveXMgKGJlbmNoIGMwNy1jMDdlKSwgc29cXG4jIGEgdG9rZW4gbWVyZWx5IGNvbnRhaW5pbmcgYSB3b3JkIHN0YXlzIGxlZ2FsLlxcbl9wZl9jb2dkcndfd29yZHMgOj0ge1xcXCJhd3NcXFwiLCBcXFwiYW1hem9uXFxcIiwgXFxcImNvZ25pdG9cXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEb21haW4gcHJlZml4ICclcycgaGFzIHRoZSByZXNlcnZlZCB3b3JkICclcycgYXMgYSBzZWdtZW50OyB0aGUgZG9tYWluIGNyZWF0ZSBmYWlscyB3aXRoIHRoZSBnZW5lcmljIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcXFxcXCJcXFwiLCBbZCwgd10pLFxcblxcdFxcXCJSZW5hbWUgb3IgbWVyZ2UgdGhhdCBzZWdtZW50IChlLmcuIG15YXBwLWF1dGgpOyB3b3JkcyBtZXJlbHkgaW5zaWRlIGEgbG9uZ2VyIHNlZ21lbnQgYXJlIGZpbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by11c2VyLXBvb2xzLWFzc2lnbi1kb21haW4tcHJlZml4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcIilcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRzb21lIHcgaW4gX3BmX2NvZ2Ryd193b3Jkc1xcblxcdHcgaW4gc3BsaXQoZCwgXFxcIi1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1GQSB3aXRob3V0IGFueSBmYWN0b3IgY29uZmlndXJhdGlvbiBjYW5ub3QgZGVwbG95XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBXaXRoIE1GQSBvbiBhbmQgbm8gRW5hYmxlZE1mYXMsIENvZ25pdG8gZmFsbHMgYmFjayB0byBTTVMgTUZBLCB3aGljaFxcbiMgbmVlZHMgU21zQ29uZmlndXJhdGlvbi4gQSBwb29sIGRlY2xhcmluZyBFbmFibGVkTWZhcyAoZS5nLiBUT1RQIG9ubHksXFxuIyBiZW5jaCBjMDViKSBpcyB2YWxpZCB3aXRob3V0IFNNUywgc28gaXRzIHByZXNlbmNlIG11dGVzIHRoZSBydWxlLlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nbXNjX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW1mYS1zbXMtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNZmFDb25maWd1cmF0aW9uICclcycgd2l0aCBubyBTbXNDb25maWd1cmF0aW9uIGFuZCBubyBFbmFibGVkTWZhczsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTTVMgY29uZmlndXJhdGlvbiBhbmQgQXV0byB2ZXJpZmljYXRpb24gZm9yIHBob25lX251bWJlciBhcmUgcmVxdWlyZWQgd2hlbiBNRkEgaXMgcmVxdWlyZWQvb3B0aW9uYWxcXFxcXFxcIlxcXCIsIFttZmFdKSxcXG5cXHRcXFwiQ29uZmlndXJlIFNtc0NvbmZpZ3VyYXRpb24gKFNNUyBNRkEpLCBvciBwaWNrIGZhY3RvcnMgdmlhIEVuYWJsZWRNZmFzIChlLmcuIFNPRlRXQVJFX1RPS0VOX01GQSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtZmEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIilcXG5cXHRtZmEgaW4ge1xcXCJPTlxcXCIsIFxcXCJPUFRJT05BTFxcXCJ9XFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIlNtc0NvbmZpZ3VyYXRpb25cXFwiKVxcblxcdF9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIFxcXCJFbmFibGVkTWZhc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1jYWxsYmFjay1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY29kZSBhbmQgaW1wbGljaXQgT0F1dGggZmxvd3MgbmVlZCBDYWxsYmFja1VSTHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZGlyZWN0LWJhc2VkIGZsb3dzIG5lZWQgc29tZXdoZXJlIHRvIHJlZGlyZWN0IHRvLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2NyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWxsYmFja1VSTHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGhhcyAnJXMnIGJ1dCBDYWxsYmFja1VSTHMgaXMgbm90IHNldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkNhbGxiYWNrVXJscyBjYW4gbm90IGJlIGVtcHR5IHdoZW4gY29kZSBmbG93IG9yIGltcGxpY2l0IGZsb3cgaXMgc2VsZWN0ZWRcXFxcXFxcIlxcXCIsIFtmLnZhbHVlXSksXFxuXFx0XFxcIkFkZCBhdCBsZWFzdCBvbmUgY2FsbGJhY2sgVVJMXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIilcXG5cXHRmLnZhbHVlIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0X3BmX2NvZ29jcl9hYnNlbnQobmFtZSwgXFxcIkNhbGxiYWNrVVJMc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIE9BdXRoIHJlcXVpcmVzIGJvdGggQWxsb3dlZE9BdXRoRmxvd3MgYW5kIEFsbG93ZWRPQXV0aFNjb3Blc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBkaXJlY3Rpb25zIGRlcGxveS12ZXJpZmllZC4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ29mc19hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2dvZnNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxuX3BmX2NvZ29mc19tc2cgOj0gXFxcInRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzIGFyZSByZXF1aXJlZCBpZiB1c2VyIHBvb2wgY2xpZW50IGlzIGFsbG93ZWQgdG8gdXNlIE9BdXRoIGZsb3dzLlxcXFxcXFwiXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50IGlzIHRydWUgYnV0IEFsbG93ZWRPQXV0aEZsb3dzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhGbG93cywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtZmxvd3Mtc2NvcGVzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhTY29wZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoU2NvcGVzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhTY29wZXMsIG9yIGRyb3AgQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIsXFxuXFx0X3BmX2NvZ29mc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIpKSA9PSB0cnVlXFxuXFx0X3BmX2NvZ29mc19hYnNlbnQobmFtZSwgXFxcIkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXNzd29yZFBvbGljeSBNaW5pbXVtTGVuZ3RoIHJ1bnMgNiB0byA5OVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBNaW5pbXVtTGVuZ3RoIGFzIGEgYmFyZSBpbnRlZ2VyOyBib3RoIGJvdW5kc1xcbiMgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ncG1sX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXBhc3N3b3JkcG9saWN5Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLlBhc3N3b3JkUG9saWN5Lk1pbmltdW1MZW5ndGhcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1MZW5ndGggJXYgaXMgdW5kZXIgdGhlIGZsb29yOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDZcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sIDwgNlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTlcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sID4gOTlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyBjYW5ub3QgcmVwZWF0IHByaW9yaXRpZXMgb3IgbmFtZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIGR1cGxpY2F0ZSBjaGVjayBvbiB0aGUgbWVjaGFuaXNtIGxpc3Q7IHRoZSBzZXJ2aWNlIGVycm9yIG5hbWVzXFxuIyBib3RoIGR1cGxpY2F0ZSBwcmlvcml0aWVzIGFuZCBkdXBsaWNhdGUgbWVjaGFuaXNtIG5hbWVzLlxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRwYSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhLCBcXFwiUHJpb3JpdHlcXFwiLCAtMSkpXFxuXFx0cGIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYiwgXFxcIlByaW9yaXR5XFxcIiwgLTIpKVxcblxcdHBhID09IHBiXFxufVxcblxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRuIDo9IG9iamVjdC5nZXQoYSwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9hXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRuID09IG9iamVjdC5nZXQoYiwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9iXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtcy4lZFxcXCIsIFtiLmluZGV4XSksXFxuXFx0XFxcIlJlY292ZXJ5IG1lY2hhbmlzbXMgcmVwZWF0IGEgcHJpb3JpdHkgb3IgbmFtZTsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2NvdW50IFJlY292ZXJ5IFNldHRpbmcgY2Fubm90IGhhdmUgZHVwbGljYXRlIHByaW9yaXRpZXMgb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgZWFjaCByZWNvdmVyeSBtZWNoYW5pc20gYSBkaXN0aW5jdCBwcmlvcml0eSBhbmQgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1yZWNvdmVyeW9wdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRpc19vYmplY3QoYS52YWx1ZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRfcGZfY29ncmRwX2R1cChhLnZhbHVlLCBiLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTY2hlbWEgYXR0cmlidXRlIE1heExlbmd0aCBjYW5ub3QgdW5kZXJjdXQgTWluTGVuZ3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgY29uc3RyYWludHMgYXJlIHR5cGVkIGFzIHN0cmluZ3MsIHNvIG5vIHNjaGVtYSBsYXllciBjYW4gY29tcGFyZVxcbiMgdGhlbSBudW1lcmljYWxseS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlNjaGVtYS4lZC5TdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIFthdHQuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBoYXMgTWluTGVuZ3RoICV2IG92ZXIgTWF4TGVuZ3RoICV2OyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNhbm5vdCBoYXZlIGEgbWF4IGxlbmd0aCBzaG9ydGVyIHRoYW4gaXQncyBtaW4gbGVuZ3RoXFxcXFxcXCJcXFwiLCBbb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjxhdHRyPlxcXCIpLCBtbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5MZW5ndGggbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heExlbmd0aFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1zY2hlbWFhdHRyaWJ1dGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdHNvbWUgYXR0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlbWFcXFwiKVxcblxcdGlzX29iamVjdChhdHQudmFsdWUpXFxuXFx0c2FjIDo9IG9iamVjdC5nZXQoYXR0LnZhbHVlLCBcXFwiU3RyaW5nQXR0cmlidXRlQ29uc3RyYWludHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc2FjKVxcblxcdG1uX3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1pbkxlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bW5fcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRteF9yYXcgOj0gb2JqZWN0LmdldChzYWMsIFxcXCJNYXhMZW5ndGhcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdG14X3JhdyAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG1uX3JhdylcXG5cXHRteCA6PSB0b19udW1iZXIobXhfcmF3KVxcblxcdG1uID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjY2VzcyBhbmQgaWQgdG9rZW5zIGNhbm5vdCBvdXRsaXZlIHRoZSByZWZyZXNoIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDcm9zcy1wcm9wZXJ0eSBpbmVxdWFsaXR5IGJldHdlZW4gZGlmZmVyZW50bHktdW5pdGVkIGR1cmF0aW9ucyAtIG9ubHlcXG4jIGNvbXBhcmFibGUgYWZ0ZXIgbm9ybWFsaXppbmcgdG8gc2Vjb25kcy4gVW5pdCBkZWZhdWx0cyBhcmUgdGhlXFxuIyBkZXBsb3ktdmVyaWZpZWQgaG91cnMvaG91cnMvZGF5cy5cXG5fcGZfY29ndGVvX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0ZW9fc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndGVvX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndGVvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi1leHBpcmF0aW9uLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3MgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2EsIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IG9yIGxlbmd0aGVuIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5XFxcIixcXG5cXHRfcGZfY29ndGVvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0YSA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0YSA+IHJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWQgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2ksIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRpIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0aSA+IHJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb2tlbiB2YWxpZGl0eSByYW5nZXMgZGVwZW5kIG9uIHRva2VuIHR5cGUgYW5kIHVuaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgdGhlIHZhbGlkaXRpZXMgYXMgYmFyZSBpbnRlZ2VyczsgdGhlIHJlYWwgcmFuZ2VzIGFyZVxcbiMgcGVyIHRva2VuIHR5cGUgQU5EIHVuaXQgKGFjY2Vzcy9pZDogNSBtaW51dGVzLTEgZGF5LCByZWZyZXNoOiA2MFxcbiMgbWludXRlcy0xMCB5ZWFycykuIFVuaXQgZGVmYXVsdHMgKGhvdXJzL2hvdXJzL2RheXMpIGFyZSBkZXBsb3ktdmVyaWZpZWQuXFxuX3BmX2NvZ3R2cl91bml0X3NlY3MgOj0ge1xcXCJzZWNvbmRzXFxcIjogMSwgXFxcIm1pbnV0ZXNcXFwiOiA2MCwgXFxcImhvdXJzXFxcIjogMzYwMCwgXFxcImRheXNcXFwiOiA4NjQwMH1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgXykgOj0gdSBpZiB7XFxuXFx0dSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuVG9rZW5WYWxpZGl0eVVuaXRzLiVzXFxcIiwgW3VuaXRLZXldKSlcXG5cXHRpc19zdHJpbmcodSlcXG59XFxuXFxuX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpIDo9IGRlZlVuaXQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHR2dSA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiVG9rZW5WYWxpZGl0eVVuaXRzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHR2dSlcXG5cXHRvYmplY3QuZ2V0KHR2dSwgdW5pdEtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29ndHZyX3NlY3MobmFtZSwgdmFsS2V5LCB1bml0S2V5LCBkZWZVbml0KSA6PSBzIGlmIHtcXG5cXHR2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbdmFsS2V5XSkpKVxcblxcdHUgOj0gX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpXFxuXFx0cyA6PSB2ICogX3BmX2NvZ3R2cl91bml0X3NlY3NbdV1cXG59XFxuXFxuX3BmX2NvZ3R2cl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzIDwgMzAwXFxuXFxuX3BmX2NvZ3R2cl9haV9iYWQocykgaWYgcyA+IDg2NDAwXFxuXFxuX3BmX2NvZ3R2cl9ydF9iYWQocykgaWYgcyA8IDM2MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzID4gMzE1MzYwMDAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNSBtaW51dGVzIGFuZCAxIGRheVxcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5XFxcIiwgXFxcIkFjY2Vzc1Rva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWRUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIklkVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJJZFRva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eSB3b3JrcyBvdXQgdG8gJXYgc2Vjb25kcywgb3V0c2lkZSA2MCBtaW51dGVzLTEwIHllYXJzOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNjAgbWludXRlcyBhbmQgMTAgeWVhcnNcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiUmVmcmVzaFRva2VuXFxcIiwgXFxcImRheXNcXFwiKVxcblxcdF9wZl9jb2d0dnJfcnRfYmFkKHMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVXNlciBwb29sIG5hbWVzIGFsbG93IG9ubHkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICs9LC5ALVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVXNlclBvb2xOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJVc2VyUG9vbE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8tdXNlci1pZGVudGl0eS1wb29scy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVVc2VyUG9vbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlVzZXJQb29sTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV8gXFxcXHQrPSwuQC1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZXJ5IEF0dHJpYnV0ZURlZmluaXRpb25zIGVudHJ5IG11c3QgYmUgdXNlZCBieSBhIGtleSBzY2hlbWFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaDogZXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZVxcbiMgdXNlZCBieSB0aGUgdGFibGUga2V5IHNjaGVtYSBvciBhbiBpbmRleCBrZXkgc2NoZW1hLiBUaGUgZW5naW5lJ3MgRTMwMzlcXG4jIGNoZWNrcyB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9ubHkgKGtleSBhdHRyaWJ1dGUgbm90IGRlZmluZWQpLCBzbyB0aGVcXG4jIGNsYXNzaWMgXFxcInJlbW92ZWQgYSBHU0ksIGxlZnQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uXFxcIiBtaXN0YWtlIHNhaWxzIHRocm91Z2guXFxuXFxuX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGEgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgcHJvcCkgOj0ge2EgfFxcblxcdHNvbWUgaXggaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGl4LnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX2RkYmFkdV91c2VkKG5hbWUpIDo9ICgoX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIHxcXG5cXHRfcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIikpXFxuXFxuIyBBbnkgdW5yZXNvbHZhYmxlIEF0dHJpYnV0ZU5hbWUgaW4gYSBrZXkgc2NoZW1hIG1lYW5zIHRoZSB1c2VkLXNldCBpc1xcbiMgaW5jb21wbGV0ZSwgc28gdGhlIHJ1bGUgbXVzdCBzdGF5IHNpbGVudCByYXRoZXIgdGhhbiBndWVzcy5cXG5fcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxufVxcblxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1hdHRyaWJ1dGUtZGVmaW5pdGlvbnMtdXNhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbZC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGlzIGRlZmluZWQgYnV0IHVzZWQgYnkgbm8ga2V5IHNjaGVtYTsgRHluYW1vREIgcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggYW5kIGZhaWxzIHdpdGggXFxcXFxcXCJOdW1iZXIgb2YgYXR0cmlidXRlcyBpbiBLZXlTY2hlbWEgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBudW1iZXIgb2YgYXR0cmlidXRlcyBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIHVudXNlZCBkZWZpbml0aW9uIChub24ta2V5IGF0dHJpYnV0ZXMgc3VjaCBhcyBhIFRUTCBhdHRyaWJ1dGUgbXVzdCBOT1QgYmUgZGVjbGFyZWQpLCBvciBhZGQgdGhlIGluZGV4IHRoYXQgdXNlcyBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0bm90IF9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRiYWR1X3VzZWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCBCaWxsaW5nTW9kZSAocmVxdWlyZWQgZm9yIFBST1ZJU0lPTkVELCBmb3JiaWRkZW4gZm9yIFBBWV9QRVJfUkVRVUVTVClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmJ0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbl9wZl9kZGJidF9oYXNfcHQobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIikpXFxuXFxuX3BmX2RkYmJ0X2JpbGxpbmdfcHJlc2VudChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIilcXG5cXG4jIEJpbGxpbmdNb2RlIOOBjOODquODhuODqeODqyBcXFwiUFJPVklTSU9ORURcXFwi44CB44G+44Gf44Gv5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIFBST1ZJU0lPTkVE77yJ44CCXFxuIyDjg4jjg7zjgq/jg7PlgKTvvIhSZWYg562J77yJ44Gv5Yik5a6a44Gr5L2/44KP44Gq44GE77yI6Kqk5qSc55+l6Ziy5q2i77yJ44CCXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUFJPVklTSU9ORURcXFwiXFxuXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdoZW4gQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm92aXNpb25lZFRocm91Z2hwdXQsIG9yIHN3aXRjaCBCaWxsaW5nTW9kZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIkJpbGxpbmdNb2RlIGlzIFBST1ZJU0lPTkVEICh0aGUgZGVmYXVsdCkgYnV0IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBpcyBtaXNzaW5nOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgKFJlYWRDYXBhY2l0eVVuaXRzIC8gV3JpdGVDYXBhY2l0eVVuaXRzKSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdF9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKVxcblxcdG5vdCBfcGZfZGRiYnRfaGFzX3B0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZHVwbGljYXRlLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkF0dHJpYnV0ZURlZmluaXRpb25zIG11c3Qgbm90IGRlZmluZSB0aGUgc2FtZSBhdHRyaWJ1dGUgdHdpY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zLiVkXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIEF0dHJpYnV0ZURlZmluaXRpb25zOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiQW4gYXR0cmlidXRlIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthbl0pLFxcblxcdFxcXCJLZWVwIGEgc2luZ2xlIGRlZmluaXRpb24gcGVyIGF0dHJpYnV0ZSBuYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGFuIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhbilcXG5cXHRvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkgPT0gYW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY29uZGFyeSBpbmRleCBuYW1lcyBtdXN0IGJlIHVuaXF1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZGluX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCJcXG5cXG4jIER1cGxpY2F0ZXMgd2l0aGluIHRoZSBzYW1lIGluZGV4IGxpc3Qgb25seTsgYSBHU0kvTFNJIGNyb3NzLWxpc3QgY2xhc2ggd2FzXFxuIyBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5JbmRleE5hbWVcXFwiLCBbcHJvcCwgYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkluZGV4IG5hbWUgJyVzJyBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiRHVwbGljYXRlIGluZGV4IG5hbWVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHNlY29uZGFyeSBpbmRleCBhIHVuaXF1ZSBJbmRleE5hbWVcXFwiLFxcblxcdF9wZl9kZGJkaW5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBwcm9wIGluIFtcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiXVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGluYW1lKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpID09IGluYW1lXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ2xvYmFsLXRhYmxlLXJlcGxpY2EtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2xvYmFsVGFibGUgUmVwbGljYXMgbXVzdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBlbmZvcmNlIHBsdWdpblxcbiMga25vd3MgdGhlIGFwcCdzIGNvbmNyZXRlIHJlZ2lvbiAoc2VlIHNyYy9wcml2YXRlL2VuZm9yY2UudHMpOyB3aXRob3V0IGl0IHRoZVxcbiMgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZCBhbmQgdGhpcyBydWxlIHNraXBzLiBSZXBsaWNhcyB3aXRoIHVucmVzb2x2YWJsZVxcbiMgUmVnaW9uIHZhbHVlcyBhbHNvIG1ha2UgdGhlIHJ1bGUgc2tpcCDigJQgYWJzZW5jZSBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgUmVwbGljYXMgbGlzdCAldiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvbiAnJXMnOyBDcmVhdGVHbG9iYWxUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIFJlcGxpY2FzIHNlY3Rpb24gbXVzdCBjb250YWluIGFuIGVudHJ5IGZvciB0aGUgY3VycmVudCByZWdpb25cXFxcXFxcIlxcXCIsIFtyZXBsaWNhcywgcmVnaW9uXSksXFxuXFx0XFxcIkFkZCBhIHJlcGxpY2EgZW50cnkgZm9yIHRoZSByZWdpb24gdGhlIHN0YWNrIGRlcGxveXMgdG8gKENESyBUYWJsZVYyIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLWdsb2JhbHRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVxcXCIpXFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0aXNfc3RyaW5nKHJlZ2lvbilcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBpdCBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKSlcXG5cXHR9XFxuXFx0cmVwbGljYXMgOj0gW3IgfCBzb21lIGl0IGluIGl0ZW1zOyByIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKV1cXG5cXHRub3QgcmVnaW9uIGluIHJlcGxpY2FzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdTSSBQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdGFibGUgQmlsbGluZ01vZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5SZWFkV3JpdGVDYXBhY2l0eU1vZGUuaHRtbFxcXCJcXG5cXG4jIEdTSS1sZXZlbCBjb3VudGVycGFydCBvZiBwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXQgKHdoaWNoIGNvdmVycyB0aGVcXG4jIHRhYmxlLWxldmVsIHBhaXIgb25seSkuIFNhbWUgdG9rZW4gc2FmZXR5OiBsaXRlcmFsIEJpbGxpbmdNb2RlIG9yIGFic2VudFxcbiMgKGRlZmF1bHQgUFJPVklTSU9ORUQpOyB0b2tlbiB2YWx1ZXMgbmV2ZXIganVkZ2VkLlxcbl9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiZ2J0X2JpbGxpbmdfcHJlc2VudChuYW1lKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgc3BlY2lmaWVzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBidXQgQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbid0IGJlIHVzZWQgd2l0aCBQQVlfUEVSX1JFUVVFU1QgQmlsbGluZ01vZGVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIEdTSSdzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIHRoZSB0YWJsZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBBWV9QRVJfUkVRVUVTVFxcXCJcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBpcyBtaXNzaW5nIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCB3aGlsZSB0aGUgdGFibGUgYmlsbHMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJBZGQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHRvIHRoZSBHU0ksIG9yIHNldCBCaWxsaW5nTW9kZSB0byBQQVlfUEVSX1JFUVVFU1RcXFwiLFxcblxcdF9wZl9kZGJnYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0bm90IGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOb25LZXlBdHRyaWJ1dGVzIGdvZXMgd2l0aCBJTkNMVURFLCBhbmQgb25seSB3aXRoIElOQ0xVREVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdwbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtcHJvamVjdGlvbi5odG1sXFxcIlxcblxcbiMgR1NJIHByb2plY3Rpb25zIG9ubHk6IHRoZSBMU0kgc2hhcGUgYW5kIHRoZSBLRVlTX09OTFkrTm9uS2V5QXR0cmlidXRlcyBjb21ib1xcbiMgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm9qZWN0aW9uXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyB1c2VzIFByb2plY3Rpb25UeXBlIElOQ0xVREUgd2l0aG91dCBOb25LZXlBdHRyaWJ1dGVzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvamVjdGlvblR5cGUgaXMgSU5DTFVERSwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgbm90IHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkxpc3QgdGhlIHByb2plY3RlZCBhdHRyaWJ1dGVzIGluIE5vbktleUF0dHJpYnV0ZXMsIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBBTEwgLyBLRVlTX09OTFlcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIklOQ0xVREVcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPT0gMFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGNvbWJpbmVzIFByb2plY3Rpb25UeXBlIEFMTCB3aXRoIE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBBTEwsIGJ1dCBOb25LZXlBdHRyaWJ1dGVzIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkRyb3AgTm9uS2V5QXR0cmlidXRlcyAoQUxMIGFscmVhZHkgcHJvamVjdHMgZXZlcnl0aGluZyksIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBJTkNMVURFXFxcIixcXG5cXHRfcGZfZGRiZ3BuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0cHJvaiA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm9qZWN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvailcXG5cXHRvYmplY3QuZ2V0KHByb2osIFxcXCJQcm9qZWN0aW9uVHlwZVxcXCIsIG51bGwpID09IFxcXCJBTExcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPiAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIktleVNjaGVtYSBtdXN0IGJlIFtIQVNIXSBvciBbSEFTSCwgUkFOR0VdXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJrc2hfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgVGFibGUtbGV2ZWwga2V5IHNjaGVtYSBvbmx5OiBpbmRleCBrZXkgc2NoZW1hcyBwcm9kdWNlIGRpZmZlcmVudCBzZXJ2aWNlXFxuIyBlcnJvcnMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbl9wZl9kZGJrc2hfdHlwZShuYW1lLCBpKSA6PSBrdCBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRpdC5pbmRleCA9PSBpXFxuXFx0a3QgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIktleVR5cGVcXFwiLCBudWxsKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYS4wLktleVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBmaXJzdCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIEhBU0gsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBmaXJzdCBLZXlTY2hlbWFFbGVtZW50IGlzIG5vdCBhIEhBU0gga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJQdXQgdGhlIHBhcnRpdGlvbiBrZXkgKEtleVR5cGUgSEFTSCkgZmlyc3QgYW5kIHRoZSBvcHRpb25hbCBzb3J0IGtleSAoUkFOR0UpIHNlY29uZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRrdCA6PSBfcGZfZGRia3NoX3R5cGUobmFtZSwgMClcXG5cXHRpc19zdHJpbmcoa3QpXFxuXFx0a3QgIT0gXFxcIkhBU0hcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjEuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHNlY29uZCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIFJBTkdFLCBnb3QgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgS2V5U2NoZW1hOiBUaGUgc2Vjb25kIEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgUkFOR0Uga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJVc2UgZXhhY3RseSBvbmUgSEFTSCBlbGVtZW50LCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IG9uZSBSQU5HRSBlbGVtZW50XFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAxKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiUkFOR0VcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJLZXlTY2hlbWEgY2FuIGhvbGQgYXQgbW9zdCAyIGVsZW1lbnRzIChIQVNIICsgb3B0aW9uYWwgUkFOR0UpLCBnb3QgJWRcXFwiLCBbbl0pLFxcblxcdFxcXCJNb2RlbCBleHRyYSBhY2Nlc3MgcGF0dGVybnMgYXMgZ2xvYmFsIG9yIGxvY2FsIHNlY29uZGFyeSBpbmRleGVzIGluc3RlYWRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0biA6PSBjb3VudChbMSB8IHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIildKVxcblxcdG4gPiAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBtdXN0IGJlIGluIHRoZSB0YWJsZSdzIHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgS2luZXNpcyBEYXRhIFN0cmVhbXMgZGVzdGluYXRpb24gbXVzdCBsaXZlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGVcXG4jIHRhYmxlLiBUaGUgZGVwbG95LXRpbWUgZmFpbHVyZSBtb2RlIGlzIHVnbHk6IHRoZSB0YWJsZSBpcyBjcmVhdGVkLCB0aGVcXG4jIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBuZXZlciBzdGFiaWxpemVzLCBhbmQgQ2xvdWRGb3JtYXRpb24gcm9sbHMgYmFjayBvblxcbiMgTm90U3RhYmlsaXplZCBtaW51dGVzIGxhdGVyIOKAlCBub3RoaW5nIG5hbWVzIHRoZSByZWdpb24gbWlzbWF0Y2guXFxuIyBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIG9ubHkgaW4gZW5mb3JjZSBtb2RlIHdpdGggYVxcbiMgY29uY3JldGUgcmVnaW9uOyBvdGhlcndpc2UgdGhpcyBydWxlIHNraXBzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBLaW5lc2lzIHN0cmVhbSBsaXZlcyBpbiAnJXMnIGJ1dCB0aGUgdGFibGUgZGVwbG95cyB0byAnJXMnOyB0aGUgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMgYW5kIHRoZSBzdGFjayByb2xscyBiYWNrXFxcIiwgW3N0cmVhbVJlZ2lvbiwgcmVnaW9uXSksXFxuXFx0XFxcIlBvaW50IEtpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFybiBhdCBhIHN0cmVhbSBpbiB0aGUgdGFibGUncyBvd24gcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9rZHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImtpbmVzaXNcXFwiXFxuXFx0c3RyZWFtUmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0c3RyZWFtUmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0c3RyZWFtUmVnaW9uICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMU0kga2V5IGF0dHJpYnV0ZXMgbXVzdCBiZSBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDM5IGNoZWNrcyB0YWJsZSBhbmQgR1NJIGtleSBzY2hlbWFzIGFnYWluc3RcXG4jIEF0dHJpYnV0ZURlZmluaXRpb25zIGJ1dCBpcyBibGluZCB0byBMb2NhbFNlY29uZGFyeUluZGV4ZXMgKG1lYXN1cmVkXFxuIyAyMDI2LTA5LTAyLCAxLjcuMC1iZXRhKS4gVGhpcyBydWxlIGNvdmVycyBleGFjdGx5IHRoYXQgZ2FwLlxcblxcbl9wZl9kZGJsYWRfZGVmcyhuYW1lKSA6PSB7YSB8XFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuIyBJZiBhbnkgZGVmaW5pdGlvbidzIG5hbWUgaXMgdW5yZXNvbHZhYmxlIHRoZSBzZXQgaXMgaW5jb21wbGV0ZSDigJQgc3RheSBzaWxlbnQuXFxuX3BmX2RkYmxhZF9kZWZzX3Jlc29sdmFibGUobmFtZSkgaWYge1xcblxcdGV2ZXJ5IGQgaW4gW3ggfCBzb21lIHggaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIildIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxTSSBrZXkgYXR0cmlidXRlICclcycgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgcmVmZXJlbmNlZCBpbiBhIEtleVNjaGVtYSBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJBZGQgdGhlIGF0dHJpYnV0ZSB0byBBdHRyaWJ1dGVEZWZpbml0aW9ucyAoYW5kIG5vd2hlcmUgZWxzZTogb25seSBrZXkgYXR0cmlidXRlcyBiZWxvbmcgdGhlcmUpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0Y291bnQoX3BmX2RkYmxhZF9kZWZzKG5hbWUpKSA+IDBcXG5cXHRfcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRibGFkX2RlZnMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBMU0kgbmVlZHMgYSBSQU5HRSBrZXkgYW5kIHRoZSB0YWJsZSdzIGxlYWRpbmcgaGFzaCBrZXlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmxzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtbG9jYWxzZWNvbmRhcnlpbmRleC5odG1sXFxcIlxcblxcbl9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpIDo9IHtrdCB8XFxuXFx0c29tZSBrIGluIGtzXFxuXFx0a3QgOj0gb2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGt0KVxcbn1cXG5cXG4jIE9ubHkganVkZ2UgYSBrZXkgc2NoZW1hIHdob3NlIEtleVR5cGVzIGFyZSBhbGwgbGl0ZXJhbCBzdHJpbmdzLlxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZShrcykgaWYgY291bnQoX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykpID4gMFxcblxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpIGlmIHtcXG5cXHRldmVyeSBrIGluIGtzIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgaGFzIG5vIFJBTkdFIGtleTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkluZGV4IEtleVNjaGVtYSBkb2VzIG5vdCBoYXZlIGEgcmFuZ2Uga2V5IGZvciBpbmRleFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgdGhlIExTSSBhIHNvcnQga2V5OiBbdGFibGUgSEFTSCBrZXksIGl0cyBvd24gUkFOR0Uga2V5XVxcXCIsXFxuXFx0X3BmX2RkYmxzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0Y291bnQoa3MpID4gMFxcblxcdF9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpXFxuXFx0bm90IFxcXCJSQU5HRVxcXCIgaW4gX3BmX2RkYmxzaF9rZXl0eXBlcyhrcylcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgdXNlcyBoYXNoIGtleSAnJXMnIGJ1dCB0aGUgdGFibGUncyBoYXNoIGtleSBpcyAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgbGVhZGluZyBoYXNoIGtleSBhcyB0YWJsZSBLZXlTY2hlbWFcXFxcXFxcIlxcXCIsIFtpbmFtZSwgbHNpSGFzaCwgdGFibGVIYXNoXSksXFxuXFx0XFxcIkFuIExTSSBtdXN0IHJldXNlIHRoZSB0YWJsZSdzIHBhcnRpdGlvbiBrZXk7IHVzZSBhIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXggZm9yIGEgZGlmZmVyZW50IGhhc2gga2V5XFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHR0LmluZGV4ID09IDBcXG5cXHR0YWJsZUhhc2ggOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhYmxlSGFzaClcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0c29tZSBrIGluIGtzXFxuXFx0b2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpID09IFxcXCJIQVNIXFxcIlxcblxcdGxzaUhhc2ggOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGxzaUhhc2gpXFxuXFx0bHNpSGFzaCAhPSB0YWJsZUhhc2hcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhYmxlIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZG90IGFuZCBoeXBoZW4gKG1heCAyNTUpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiLFxuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbl0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIiwgXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy4tXXsxLDI1NX0kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRHluYW1vREIgYWNjZXB0cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmUsIGRvdCBhbmQgaHlwaGVuLCB1cCB0byAyNTUgY2hhcmFjdGVyc1xcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFibGUgdXNpbmcgW2EtekEtWjAtOV8uLV0gd2l0aGluIDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbl0gaW4gX3BmX2RkYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWJsZU5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgKG1pbmltdW0gMyBjaGFyYWN0ZXJzKSBpcyBlbmZvcmNlZC4gVGhlIDI1NS1jaGFyXFxuIyBtYXhpbXVtIGFuZCB0aGUgY2hhcmFjdGVyIHBhdHRlcm4gd2VyZSBub3QgbWVhc3VyZWQuIE5vdGUgcmVzb2x2ZSgpIHR1cm5zIGFcXG4jIFJlZi10by1yZXNvdXJjZSBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElEOyBhIGxvZ2ljYWwgSUQgc2hvcnQgZW5vdWdoIHRvXFxuIyB0cmlwIHRoaXMgcnVsZSB3aGlsZSBmZWVkaW5nIGEgVGFibGVOYW1lIGlzIHRyZWF0ZWQgYXMgdGhlIGJ1ZyBpdCBhbG1vc3RcXG4jIGNlcnRhaW5seSBpcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHNob3J0ZXIgdGhhbiAzIGNoYXJhY3RlcnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gM1xcXFxcXFwiXFxcIiwgW3RuXSksXFxuXFx0XFxcIlVzZSBhIHRhYmxlIG5hbWUgb2YgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLCBvciBvbWl0IFRhYmxlTmFtZSBhbmQgbGV0IENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0Y291bnQodG4pIDwgM1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1pbnN0YW5jZS1hbWktYXJjaFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnN0YW5jZSB0eXBlIGFyY2hpdGVjdHVyZSBtdXN0IG1hdGNoIHRoZSBTU00gcHVibGljLXBhcmFtZXRlciBBTUkgYXJjaGl0ZWN0dXJlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyaWFhX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWxcXFwiXFxuXFxuIyBHcmF2aXRvbiBuYW1pbmcgY29udmVudGlvbjogYSBcXFwiZ1xcXCIgYW1vbmcgdGhlIGxldHRlcnMgYWZ0ZXIgdGhlXFxuIyBnZW5lcmF0aW9uIGRpZ2l0ICh0NGcsIGM3Z24sIGltNGduLCBnNWcpLCBwbHVzIHRoZSBwcmUtY29udmVudGlvbiBhMS5cXG4jIG1hYyogZmFtaWxpZXMgYXJlIGV4Y2x1ZGVkIGZyb20ganVkZ21lbnQgZW50aXJlbHkuXFxuX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSkgaWYgcmVnZXgubWF0Y2goYF5bYS16XStbMC05XStbYS16MC05XSpnW2EtejAtOV0qJGAsIGZhbSlcXG5cXG5fcGZfZWMyaWFhX2FybV9mYW0oZmFtKSBpZiBmYW0gPT0gXFxcImExXFxcIlxcblxcbl9wZl9lYzJpYWFfZmFtKG5hbWUpIDo9IGZhbSBpZiB7XFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRmYW0gOj0gc3BsaXQoaXQsIFxcXCIuXFxcIilbMF1cXG5cXHRub3Qgc3RhcnRzd2l0aChmYW0sIFxcXCJtYWNcXFwiKVxcbn1cXG5cXG4jIHt7cmVzb2x2ZTpzc206Li4ufX0gc3RyaW5ncyBzdXJmYWNlIGFzIHtcXFwiX19keW5hbWljXFxcIjogXFxcImR5bmFtaWNcXG4jIHJlZmVyZW5jZToge3tyZXNvbHZlOnNzbTo8cGF0aD59fVxcXCJ9IG1hcmtlciBvYmplY3RzIChtZWFzdXJlZFxcbiMgMjAyNi0wOS0wMyk7IHRoZSByZWZlcmVuY2UgdGV4dCBpcyByZWFkIGZyb20gdGhlIG1hcmtlci5cXG5fcGZfZWMyaWFhX2ltZyhuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkltYWdlSWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChyYXcpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHJhdywgXFxcIl9fZHluYW1pY1xcXCIsIFxcXCJcXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdGNvbnRhaW5zKGQsIFxcXCJ7e3Jlc29sdmU6c3NtOlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgeDg2XzY0IGJ1dCB0aGUgQU1JIHBhcmFtZXRlciBwYXRoIG5hbWVzIGFybTY0OyB0aGUgbGF1bmNoIGZhaWxzIHdpdGggYW4gYXJjaGl0ZWN0dXJlIG1pc21hdGNoXFxcIiwgW3Jlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIildKSxcXG5cXHRcXFwiVXNlIGFuIGFybTY0IChHcmF2aXRvbikgaW5zdGFuY2UgdHlwZSBvciB0aGUgeDg2XzY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRub3QgX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSlcXG5cXHRpbWcgOj0gX3BmX2VjMmlhYV9pbWcobmFtZSlcXG5cXHRjb250YWlucyhpbWcsIFxcXCJhcm02NFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgYXJtNjQgKEdyYXZpdG9uKSBidXQgdGhlIEFNSSBwYXJhbWV0ZXIgcGF0aCBuYW1lcyB4ODZfNjQ7IHRoZSBsYXVuY2ggZmFpbHMgd2l0aCBhbiBhcmNoaXRlY3R1cmUgbWlzbWF0Y2hcXFwiLCBbcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKV0pLFxcblxcdFxcXCJVc2UgYW4geDg2XzY0IGluc3RhbmNlIHR5cGUgb3IgdGhlIGFybTY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRfcGZfZWMyaWFhX2FybV9mYW0oZmFtKVxcblxcdGltZyA6PSBfcGZfZWMyaWFhX2ltZyhuYW1lKVxcblxcdGNvbnRhaW5zKGltZywgXFxcIng4Nl82NFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLWxhdW5jaC10ZW1wbGF0ZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhdW5jaCB0ZW1wbGF0ZSBuYW1lcyBhcmUgMy0xMjggY2hhcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSgpLi9fXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1sYXVuY2gtdGVtcGxhdGUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUZW1wbGF0ZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRUMyIHJlcXVpcmVzIDMtMTI4IGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSAoICkgLiAvIF9cXFwiLCBbbl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB1c2luZyBvbmx5IGxldHRlcnMsIG51bWJlcnMgYW5kIC0gKCApIC4gLyBfICgzLTEyOCBjaGFyYWN0ZXJzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGF1bmNoVGVtcGxhdGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOSgpLi9fLV17MywxMjh9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLW5hdGd3LWFsbG9jYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTkFUIGdhdGV3YXkgQWxsb2NhdGlvbklkIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgY29ubmVjdGl2aXR5IGFuZCBmb3JiaWRkZW4gZm9yIHByaXZhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpOYXRHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMm5nYV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ29ubmVjdGl2aXR5VHlwZSBkZWZhdWx0cyB0byBwdWJsaWM7IGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBza2lwcyBib3RoIGRpcmVjdGlvbnMuXFxuX3BmX2VjMm5nYV9wdWJsaWMobmFtZSkgaWYgX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwgXFxcIkNvbm5lY3Rpdml0eVR5cGVcXFwiKVxcblxcbl9wZl9lYzJuZ2FfcHVibGljKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwdWJsaWNcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwcml2YXRlIE5BVCBnYXRld2F5IGNhbm5vdCB0YWtlIEFsbG9jYXRpb25JZCAoXFxcXFxcXCJBbGxvY2F0aW9uSWQgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBOQVQgR2F0ZXdheSB3aXRoIENvbm5lY3Rpdml0eSBUeXBlIHByaXZhdGUuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIEFsbG9jYXRpb25JZCwgb3Igc3dpdGNoIENvbm5lY3Rpdml0eVR5cGUgdG8gcHVibGljXFxcIixcXG5cXHRfcGZfZWMybmdhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwcml2YXRlXFxcIlxcblxcdG5vdCBfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwdWJsaWMgTkFUIGdhdGV3YXkgcmVxdWlyZXMgQWxsb2NhdGlvbklkIChcXFxcXFxcIlRoZSByZXF1ZXN0IG11c3QgaW5jbHVkZSB0aGUgQWxsb2NhdGlvbklkIHBhcmFtZXRlci5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJBbGxvY2F0ZSBhbiBFSVAgYW5kIHBhc3MgaXRzIEFsbG9jYXRpb25JZCwgb3Igc2V0IENvbm5lY3Rpdml0eVR5cGU6IHByaXZhdGVcXFwiLFxcblxcdF9wZl9lYzJuZ2FfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVxcXCIpXFxuXFx0X3BmX2VjMm5nYV9wdWJsaWMobmFtZSlcXG5cXHRfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcGctY2x1c3Rlci1idXJzdGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVyc3RhYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNsdXN0ZXIgcGxhY2VtZW50IGdyb3Vwc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ3Jvc3MtcmVzb3VyY2U6IG9ubHkgZmlyZXMgd2hlbiB0aGUgcmVmZXJlbmNlZCBwbGFjZW1lbnQgZ3JvdXAgaXMgaW5cXG4jIHRoZSB0ZW1wbGF0ZSB3aXRoIFN0cmF0ZWd5IGNsdXN0ZXIuIEEgbGl0ZXJhbCAocHJlLWV4aXN0aW5nKSBncm91cFxcbiMgbmFtZSBjYXJyaWVzIG5vIHN0cmF0ZWd5IGluZm9ybWF0aW9uIGFuZCBzdGF5cyBzaWxlbnQuXFxuX3BmX2VjMnBnYl9idXJzdGFibGUoZmFtKSBpZiBmYW0gaW4ge1xcXCJ0MlxcXCIsIFxcXCJ0M1xcXCIsIFxcXCJ0M2FcXFwiLCBcXFwidDRnXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1wZy1jbHVzdGVyLWJ1cnN0YWJsZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbHVzdGVyIHBsYWNlbWVudCBncm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICclcycgaW5zdGFuY2UgdHlwZTsgdGhlIGxhdW5jaCBmYWlscyBhdCBkZXBsb3lcXFwiLCBbaXRdKSxcXG5cXHRcXFwiVXNlIGEgbm9uLWJ1cnN0YWJsZSB0eXBlLCBvciBhIHNwcmVhZC9wYXJ0aXRpb24gcGxhY2VtZW50IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3BsYWNlbWVudC1ncm91cHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCIpXFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRfcGZfZWMycGdiX2J1cnN0YWJsZShzcGxpdChpdCwgXFxcIi5cXFwiKVswXSlcXG5cXHRwZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYWNlbWVudEdyb3VwTmFtZVxcXCIpXFxuXFx0cGcgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFxcXCIpXFxuXFx0cmVzb2x2ZShwZywgXFxcIlByb3BlcnRpZXMuU3RyYXRlZ3lcXFwiKSA9PSBcXFwiY2x1c3RlclxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcm91dGUtdGFyZ2V0LWV4YWN0bHktb25lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcm91dGUgbXVzdCBuYW1lIGV4YWN0bHkgb25lIHRhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlJvdXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgMTEgdGFyZ2V0IHByb3BlcnRpZXMsIHN0cmFpZ2h0IGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlLlxcbl9wZl9lYzJydGVfdGFyZ2V0cyA6PSBbXFxcIkdhdGV3YXlJZFxcXCIsIFxcXCJMb2NhbEdhdGV3YXlJZFxcXCIsIFxcXCJDYXJyaWVyR2F0ZXdheUlkXFxcIiwgXFxcIk5hdEdhdGV3YXlJZFxcXCIsIFxcXCJOZXR3b3JrSW50ZXJmYWNlSWRcXFwiLCBcXFwiVnBjUGVlcmluZ0Nvbm5lY3Rpb25JZFxcXCIsIFxcXCJFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWRcXFwiLCBcXFwiVHJhbnNpdEdhdGV3YXlJZFxcXCIsIFxcXCJWcGNFbmRwb2ludElkXFxcIiwgXFxcIkNvcmVOZXR3b3JrQXJuXFxcIiwgXFxcIkluc3RhbmNlSWRcXFwiXVxcblxcbl9wZl9lYzJydGVfY291bnQobmFtZSkgOj0gbiBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMycnRlX3RhcmdldHM7IG9iamVjdC5nZXQocHJvcHMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1yb3V0ZS10YXJnZXQtZXhhY3RseS1vbmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcm91dGUgbmFtZXMgJXYgdGFyZ2V0czsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9mIEdhdGV3YXlJZCwgTG9jYWxHYXRld2F5SWQsIENhcnJpZXJHYXRld2F5SWQsIE5hdEdhdGV3YXlJZCwgTmV0d29ya0ludGVyZmFjZUlkLCBWcGNQZWVyaW5nQ29ubmVjdGlvbklkLCBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQsIFRyYW5zaXRHYXRld2F5SWQsIFZwY0VuZHBvaW50SWQsIENvcmVOZXR3b3JrQXJuIG9yIEluc3RhbmNlSWRcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgdGFyZ2V0IHByb3BlcnR5IG9uIHRoZSByb3V0ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1yb3V0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlJvdXRlXFxcIilcXG5cXHRuIDo9IF9wZl9lYzJydGVfY291bnQobmFtZSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctY2lkci12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIENpZHJJcCBtdXN0IGJlIGEgd2VsbC1mb3JtZWQgSVB2NCBDSURSXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyc2N2X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpIGlmIHtcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHR0b19udW1iZXIoc3BsaXQoYywgXFxcIi9cXFwiKVsxXSkgPiAzMlxcbn1cXG5cXG5fcGZfZWMyc2N2X21hbGZvcm1lZChjKSBpZiB7XFxuXFx0cmVnZXgubWF0Y2goYF5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsvWzAtOV0rJGAsIGMpXFxuXFx0c29tZSBvIGluIHNwbGl0KHNwbGl0KGMsIFxcXCIvXFxcIilbMF0sIFxcXCIuXFxcIilcXG5cXHR0b19udW1iZXIobykgPiAyNTVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5DaWRySXBcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ2lkcklwICclcycgaXMgbWFsZm9ybWVkIChvY3RldHMgbXVzdCBiZSAwLTI1NSwgcHJlZml4IDAtMzIpOyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQ0lEUiBibG9jayAlcyBpcyBtYWxmb3JtZWRcXFxcXFxcIlxcXCIsIFtjLCBjXSksXFxuXFx0XFxcIkZpeCB0aGUgQ0lEUiBub3RhdGlvblxcXCIsXFxuXFx0X3BmX2VjMnNjdl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdGMgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIkNpZHJJcFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0X3BmX2VjMnNjdl9tYWxmb3JtZWQoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDaWRySXAgJyVzJyBpcyBtYWxmb3JtZWQgKG9jdGV0cyBtdXN0IGJlIDAtMjU1LCBwcmVmaXggMC0zMik7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJDSURSIGJsb2NrICVzIGlzIG1hbGZvcm1lZFxcXFxcXFwiXFxcIiwgW2MsIGNdKSxcXG5cXHRcXFwiRml4IHRoZSBDSURSIG5vdGF0aW9uXFxcIixcXG5cXHRfcGZfZWMyc2N2X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRfcGZfZWMyc2N2X21hbGZvcm1lZChjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIG5hbWVzIG1heSBub3Qgc3RhcnQgd2l0aCBzZy1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctZ3JvdXAtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJHcm91cE5hbWUgJyVzJyBzdGFydHMgd2l0aCB0aGUgcmVzZXJ2ZWQgcHJlZml4OyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiR3JvdXAgbmFtZXMgbWF5IG5vdCBiZSBpbiB0aGUgZm9ybWF0IHNnLSpcXFxcXFxcIlxcXCIsIFtnbl0pLFxcblxcdFxcXCJQaWNrIGEgbmFtZSB0aGF0IGRvZXMgbm90IHN0YXJ0IHdpdGggc2ctXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZWN1cml0eUdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0Z24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Hcm91cE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhnbilcXG5cXHRzdGFydHN3aXRoKGduLCBcXFwic2ctXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcnVsZS1kZXNjcmlwdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIGRlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCB0byAyNTUgY2hhcnMgb2YgYSByZXN0cmljdGVkIEFTQ0lJIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnZGVzY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfc2dkZXNjX3BhdCA6PSBgXlthLXpBLVowLTkuXyA6LygpIyxAXFxcXFtcXFxcXSs9Jjt7fSEkKi1dezAsMjU1fSRgXFxuXFxuIyBpbmxpbmUgcnVsZSBsaXN0cyBvbiBhIHNlY3VyaXR5IGdyb3VwXFxuX3BmX3NnZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIGRlc2NdIGlmIHtcXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGtleSBpbiBbXFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiXVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3Qobiwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtrZXldKSlcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRkZXNjIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkRlc2NyaXB0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZGVzYylcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX3NnZGVzY19wYXQsIGRlc2MpXFxuXFx0bmFtZSA6PSBuXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkRlc2NyaXB0aW9uXFxcIiwgW2tleSwgci5pbmRleF0pXFxufVxcblxcbiMgc3RhbmRhbG9uZSBydWxlIHJlc291cmNlc1xcbl9wZl9zZ2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkZXNjXSBpZiB7XFxuXFx0c29tZSB0IGluIFtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIl1cXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRkZXNjIDo9IHJlc29sdmUobiwgXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyhkZXNjKVxcblxcdG5vdCByZWdleC5tYXRjaChfcGZfc2dkZXNjX3BhdCwgZGVzYylcXG5cXHRuYW1lIDo9IG5cXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1ydWxlLWRlc2NyaXB0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRwYXRoLFxcblxcdHNwcmludGYoXFxcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgZGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogRUMyIGFsbG93cyBmZXdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzIGZyb20gdGhlIHNldCBhLXpBLVowLTkuIF8tOi8oKSMsQFtdKz0mO3t9ISQqIChub24tQVNDSUkgdGV4dCBzdWNoIGFzIEphcGFuZXNlIGlzIHJlamVjdGVkKVxcXCIsIFtkZXNjXSksXFxuXFx0XFxcIldyaXRlIHRoZSBydWxlIGRlc2NyaXB0aW9uIGluIHRoZSBhbGxvd2VkIEFTQ0lJIHNldCBhbmQga2VlcCBpdCB1bmRlciAyNTYgY2hhcmFjdGVyc1xcXCIsXFxuXFx0X3BmX3NnZGVzY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkZXNjXSBpbiBfcGZfc2dkZXNjX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgc2VjdXJpdHkgZ3JvdXAgcnVsZSB0YWtlcyBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJzc2VfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0F1dGhvcml6ZVNlY3VyaXR5R3JvdXBJbmdyZXNzLmh0bWxcXFwiXFxuXFxuIyBUaGUgbWVtYmVyIHNldHMgY29tZSB2ZXJiYXRpbSBmcm9tIHRoZSBFQzIgZXJyb3IgbWVzc2FnZXMuXFxuX3BmX2VjMnNzZV9zZXRzIDo9IHtcXFwiaW5cXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJTb3VyY2VTZWN1cml0eUdyb3VwSWRcXFwiLCBcXFwiU291cmNlUHJlZml4TGlzdElkXFxcIl0sIFxcXCJvdXRcXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJEZXN0aW5hdGlvblByZWZpeExpc3RJZFxcXCIsIFxcXCJEZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZFxcXCJdfVxcblxcbl9wZl9lYzJzc2VfZGlya2V5IDo9IHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiOiBcXFwiaW5cXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfcmtleSA6PSB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCI6IFxcXCJpblxcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfY291bnQoZW50cnksIHNldGtleSkgOj0gbiBpZiB7XFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG4gOj0gY291bnQoW2sgfCBzb21lIGsgaW4gX3BmX2VjMnNzZV9zZXRzW3NldGtleV07IG9iamVjdC5nZXQoZW50cnksIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG4jIEVtYmVkZGVkIHJ1bGVzOiB0d28gb3IgbW9yZSBtZW1iZXJzIGlzIGFuIGVycm9yOyB6ZXJvIGlzIHRvbGVyYXRlZFxcbiMgKGEgc291cmNlLWxlc3MgZW1iZWRkZWQgaW5ncmVzcyBkZXBsb3llZCBjbGVhbiBvbiAyMDI2LTA5LTAzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkXFxcIiwgW2RpciwgaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRoZSBydWxlIHNldHMgJXYgb2YgJXY7IEVDMiBhbGxvd3Mgb25seSBvbmUgKFxcXFxcXFwiT25seSBvbmUgb2YgJXMgY2FuIGJlIHNwZWNpZmllZFxcXFxcXFwiKVxcXCIsIFtuLCBfcGZfZWMyc3NlX3NldHNba10sIGNvbmNhdChcXFwiLCBcXFwiLCBfcGZfZWMyc3NlX3NldHNba10pXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGsgOj0gX3BmX2VjMnNzZV9kaXJrZXlbZGlyXVxcblxcdG4gOj0gX3BmX2VjMnNzZV9jb3VudChpdGVtLnZhbHVlLCBrKVxcblxcdG4gPj0gMlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJ1bGUgc2V0cyAldiBvZiAldjsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIChcXFxcXFxcIkV4YWN0bHkgb25lIG9mICVzIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBub3QgZW1wdHlcXFxcXFxcIilcXFwiLCBbbiwgX3BmX2VjMnNzZV9zZXRzW2tdLCBjb25jYXQoXFxcIiwgXFxcIiwgX3BmX2VjMnNzZV9zZXRzW2tdKV0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlIHJlc291cmNlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRrIDo9IF9wZl9lYzJzc2VfcmtleVtydHlwZV1cXG5cXHRuIDo9IF9wZl9lYzJzc2VfY291bnQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIGspXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXN1Ym5ldC1jaWRyLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0IElQdjQgQ0lEUiBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zdWJuZXRjaWRyX2xlbihjKSA6PSB0b19udW1iZXIocGFydHNbMV0pIGlmIHtcXG5cXHRwYXJ0cyA6PSBzcGxpdChjLCBcXFwiL1xcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc3VibmV0LWNpZHItc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTdWJuZXQgQ0lEUiAnJXMnIGhhcyBhIC8lZCBuZXRtYXNrOyBFQzIgYWNjZXB0cyAvMTYgdGhyb3VnaCAvMjggYW5kIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIG90aGVyd2lzZVxcXCIsIFtjLCBuXSksXFxuXFx0XFxcIlJlc2l6ZSB0aGUgc3VibmV0IENJRFIgdG8gYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvc3VibmV0LXNpemluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlN1Ym5ldFxcXCIpXFxuXFx0YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0biA6PSBfcGZfc3VibmV0Y2lkcl9sZW4oYylcXG5cXHRfcGZfc3VibmV0Y2lkcl9vdXQobilcXG59XFxuXFxuX3BmX3N1Ym5ldGNpZHJfb3V0KG4pIGlmIG4gPCAxNlxcblxcbl9wZl9zdWJuZXRjaWRyX291dChuKSBpZiBuID4gMjhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi11c2VyZGF0YS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDMiB1c2VyIGRhdGEgaXMgbGltaXRlZCB0byAxNjM4NCBieXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl91ZHN6X2ZpeCA6PSBcXFwiS2VlcCB1c2VyIGRhdGEgdW5kZXIgMTYzODQgYnl0ZXM7IG1vdmUgbGFyZ2UgcGF5bG9hZHMgdG8gUzMgYW5kIGZldGNoIHRoZW0gZnJvbSBhIHNtYWxsIGJvb3RzdHJhcCBzY3JpcHRcXFwiXFxuXFxuX3BmX3Vkc3pfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2VkYXRhLWFkZC11c2VyLWRhdGEuaHRtbFxcXCJcXG5cXG5fcGZfdWRzel9saW1pdCA6PSAxNjM4NFxcblxcbiMgYmFzZTY0IOaWh+Wtl+WIl+OBruODh+OCs+ODvOODieW+jOODkOOCpOODiOaVsO+8iOODkeODh+OCo+ODs+OCsOiAg+aFru+8iVxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAyIGlmIGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDEgaWYge1xcblxcdGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXHRub3QgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG59XFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoY291bnQocykgKiAzKSAvIDQgaWYgbm90IGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXG5fcGZfdWRzel9wYXRocyA6PSB7XFxuXFx0XFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLlVzZXJEYXRhXFxcIixcXG5cXHRcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIjogXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVEYXRhLlVzZXJEYXRhXFxcIixcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYzjg6rjg4bjg6njg6sgYmFzZTY0IOaWh+Wtl+WIl+OBruOCseODvOOCuVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGRlY29kZXMgdG8gYWJvdXQgJXYgYnl0ZXMsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW3NpemUsIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19zdHJpbmcodWQpXFxuXFx0c2l6ZSA6PSBfcGZfdWRzel9kZWNvZGVkKHVkKVxcblxcdHNpemUgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjCB7XFxcIkZuOjpCYXNlNjRcXFwiOiBcXFwiPGxpdGVyYWw+XFxcIn0g44Gu44Kx44O844K577yI44Ko44Oz44Kz44O844OJ5YmN44Gu55Sf44OQ44Kk44OI5pWw44Gn5Yik5a6a77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgaXMgJWQgYnl0ZXMgYmVmb3JlIGJhc2U2NCBlbmNvZGluZywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbY291bnQoaW5uZXIpLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfb2JqZWN0KHVkKVxcblxcdGlubmVyIDo9IG9iamVjdC5nZXQodWQsIFxcXCJGbjo6QmFzZTY0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5uZXIpXFxuXFx0Y291bnQoaW5uZXIpID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUJTIElvcHMvVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgdHlwZSdzIHN1cHBvcnRlZCByYW5nZXMgYW5kIHJhdGlvc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl92b2xpb3BzX2ZpeCA6PSBcXFwiTWF0Y2ggSW9wcy9UaHJvdWdocHV0IHRvIHRoZSB2b2x1bWUgdHlwZTogZ3AzIDMwMDAtODAwMDAgSU9QUyAobWF4IDUwMC9HaUIsIHRocm91Z2hwdXQgMTI1LTIwMDAgTWlCL3MgYW5kIGF0IG1vc3QgSU9QUy80KSwgaW8xIDEwMC02NDAwMCAobWF4IDUwL0dpQiksIGlvMiAxMDAtMjU2MDAwIChtYXggMTAwMC9HaUIpOyBncDIvc3QxL3NjMS9zdGFuZGFyZCBhY2NlcHQgbmVpdGhlciBwcm9wZXJ0eVxcXCJcXG5cXG5fcGZfdm9saW9wc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfcmFuZ2UgOj0ge1xcXCJncDNcXFwiOiBbMzAwMCwgODAwMDBdLCBcXFwiaW8xXFxcIjogWzEwMCwgNjQwMDBdLCBcXFwiaW8yXFxcIjogWzEwMCwgMjU2MDAwXX1cXG5cXG5fcGZfdm9saW9wc19wZXJfZ2liIDo9IHtcXFwiZ3AzXFxcIjogNTAwLCBcXFwiaW8xXFxcIjogNTAsIFxcXCJpbzJcXFwiOiAxMDAwfVxcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPCBsb1xcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPiBoaVxcblxcbl9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxuXFxuIyBJT1BTIOOBjOWei+OBlOOBqOOBrue1tuWvvuODrOODs+OCuOWkllxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgJWQtJWQgZm9yICVzIHZvbHVtZXNcXFwiLCBbbiwgclswXSwgclsxXSwgdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyIDo9IF9wZl92b2xpb3BzX3JhbmdlW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dChuLCByWzBdLCByWzFdKVxcbn1cXG5cXG4jIElPUFMgOiDjgrXjgqTjgrrmr5Tjga7otoXpgY5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAlZCBJT1BTIHBlciBHaUIgZm9yICVzIChTaXplICV2IEdpQiBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbbiwgcmF0aW8sIHZ0LCBzLCBzICogcmF0aW9dKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyYXRpbyA6PSBfcGZfdm9saW9wc19wZXJfZ2liW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIpKVxcblxcdG4gPiBzICogcmF0aW9cXG59XFxuXFxuIyBJb3BzIOOCkuWPl+OBkeS7mOOBkeOBquOBhOWei+OBqyBJb3BzIOOCkuaMh+WumlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMsIGlvMSwgaW8yKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJncDJcXFwiLCBcXFwic3QxXFxcIiwgXFxcInNjMVxcXCIsIFxcXCJzdGFuZGFyZFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG59XFxuXFxuIyBUaHJvdWdocHV0IOOBryBncDMg5bCC55SoXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMyk7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh2dClcXG5cXHR2dCAhPSBcXFwiZ3AzXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQg44Gu57W25a++44Os44Oz44K4XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAxMjUtMjAwMCBmb3IgZ3AzIHZvbHVtZXNcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dCh0LCAxMjUsIDIwMDApXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQgOiBJT1BTIOavlO+8iOacgOWkpyAwLjI1IE1pQi9zIHBlciBJT1BT77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUyAoJXYgSU9QUyBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbdCwgbiwgbiAvIDRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHR0ICogNCA+IG5cXG59XFxuXFxuIyBncDMg44GnIElvcHMg5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIDMwMDDvvInjga7jgajjgY3jga4gVGhyb3VnaHB1dCDmr5RcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyA3NTAsIHRoZSBtYXhpbXVtIGZvciB0aGUgZGVmYXVsdCAzMDAwIElPUFMgKDAuMjUgTWlCL3MgcGVyIElPUFMpOyBwcm92aXNpb24gSW9wcyBleHBsaWNpdGx5IG9yIGxvd2VyIHRoZSB0aHJvdWdocHV0XFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRub3QgX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHR0ID4gNzUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImlvMSBhbmQgaW8yIHZvbHVtZXMgcmVxdWlyZSB0aGUgSW9wcyBwcm9wZXJ0eVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgcGYtZWMyLXZvbHVtZS1pb3BzIHZhbGlkYXRlcyBJb3BzIHZhbHVlczsgdGhpcyBydWxlIGNvdmVycyB0aGVcXG4jIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50IChhYnNlbmNlKSB0aGF0IHRoZSBzY2hlbWEgY2Fubm90IGV4cHJlc3MuXFxuX3BmX2VjMnZpcl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlcyB2b2x1bWVzIHJlcXVpcmUgSW9wczsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVyIGlvcHMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yICVzIHZvbHVtZXMuXFxcXFxcXCJcXFwiLCBbdnQsIHZ0XSksXFxuXFx0XFxcIlNldCBJb3BzIChpbzE6IDEwMC02NDAwMCwgaW8yOiAxMDAtMjU2MDAwKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiaW8xXFxcIiwgXFxcImlvMlxcXCJ9XFxuXFx0X3BmX2VjMnZpcl9hYnNlbnQobmFtZSwgXFxcIklvcHNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUta21zLWVuY3J5cHRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLbXNLZXlJZCBvbiBhIHZvbHVtZSByZXF1aXJlcyBFbmNyeXB0ZWQgdG8gYmUgdHJ1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2a2VfYmFkKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRW5jcnlwdGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfZWMydmtlX2JhZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuY3J5cHRlZFxcXCIpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWttcy1lbmNyeXB0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkttc0tleUlkXFxcIixcXG5cXHRcXFwiS21zS2V5SWQgaXMgc2V0IGJ1dCBFbmNyeXB0ZWQgaXMgbm90IHRydWU7IEVDMiByZWplY3RzIHRoZSB2b2x1bWUgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXIgW0ttc0tleUlkXSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIEVuY3J5cHRlZCB0byBiZSBzZXQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgRW5jcnlwdGVkOiB0cnVlIGFsb25nc2lkZSBLbXNLZXlJZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS21zS2V5SWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0X3BmX2VjMnZrZV9iYWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLXNpemUtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQlMgdm9sdW1lIHNpemUgbXVzdCBtZWV0IHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtIChpbzEvaW8yIDQgR2lCLCBzdDEvc2MxIDEyNSBHaUIpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IG1pbmltdW1zOiB0aGUgaGlzdG9yaWNhbCAxNjM4NCBHaUIgbWF4aW11bSBubyBsb25nZXIgaG9sZHNcXG4jIChhIDE3MDAwIEdpQiBncDMgZGVwbG95ZWQgY2xlYW4gb24gMjAyNi0wOS0wMykuXFxuX3BmX2VjMnZzbV9taW4gOj0ge1xcXCJpbzFcXFwiOiA0LCBcXFwiaW8yXFxcIjogNCwgXFxcInN0MVxcXCI6IDEyNSwgXFxcInNjMVxcXCI6IDEyNX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtc2l6ZS1taW5pbXVtXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplICV2IEdpQiBpcyBiZWxvdyB0aGUgJXYgR2lCIG1pbmltdW0gZm9yICVzIHZvbHVtZXMgKFxcXFxcXFwiJXMgdm9sdW1lcyBtdXN0IGJlIGF0IGxlYXN0ICV2IEdpQiBpbiBzaXplLlxcXFxcXFwiKVxcXCIsIFtzLCBtbiwgdnQsIHZ0LCBtbl0pLFxcblxcdFxcXCJSYWlzZSBTaXplIHRvIHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0bW4gOj0gX3BmX2VjMnZzbV9taW5bdnRdXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaXplXFxcIikpXFxuXFx0cyA8IG1uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVlBDIElQdjQgQ0lEUiBibG9jayBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSB2YWxpZGF0ZXMgc3VibmV0IGNvbnRhaW5tZW50IChFMzA1OSkgYW5kIG92ZXJsYXAgKEUzMDYwKVxcbiMgYnV0IGFjY2VwdHMgYW55IFZQQyBuZXRtYXNrOyBFQzIgcmVqZWN0cyBhbnl0aGluZyBvdXRzaWRlIC8xNi4uLzI4LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVlBDIENJRFIgYmxvY2sgJyVzJyBoYXMgbmV0bWFzayAvJXY7IEVDMiBvbmx5IGFjY2VwdHMgLzE2IHRocm91Z2ggLzI4IChcXFxcXFxcIlRoZSBDSURSICclcycgaXMgaW52YWxpZC5cXFxcXFxcIilcXFwiLCBbYywgcCwgY10pLFxcblxcdFxcXCJVc2UgYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDXFxcIilcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHRwIDo9IHRvX251bWJlcihzcGxpdChjLCBcXFwiL1xcXCIpWzFdKVxcblxcdF9wZl9lYzJ2Y3Nfb3V0KHApXFxufVxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPCAxNlxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPiAyOFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtZ2F0ZXdheS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdhdGV3YXkgVlBDIGVuZHBvaW50cyBvbmx5IGV4aXN0IGZvciBTMyBhbmQgRHluYW1vREJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVnBjRW5kcG9pbnRUeXBlIGRlZmF1bHRzIHRvIEdhdGV3YXkgKG1lYXN1cmVkOiBhIHR5cGUtbGVzcyBlbmRwb2ludFxcbiMgZmFpbHMgd2l0aCBcXFwiRW5kcG9pbnQgdHlwZSAoR2F0ZXdheSkgLi4uXFxcIiBtZXNzYWdlcykuXFxuX3BmX2VjMnZnc19nYXRld2F5KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjRW5kcG9pbnRUeXBlXFxcIiwgXFxcIkdhdGV3YXlcXFwiKSA9PSBcXFwiR2F0ZXdheVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1nYXRld2F5LXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJPbmx5IFMzIGFuZCBEeW5hbW9EQiBvZmZlciBHYXRld2F5IGVuZHBvaW50czsgXFxcXFxcXCIlc1xcXFxcXFwiIGZhaWxzIHdpdGggXFxcXFxcXCJFbmRwb2ludCB0eXBlIChHYXRld2F5KSBkb2VzIG5vdCBtYXRjaCBhdmFpbGFibGUgc2VydmljZSB0eXBlc1xcXFxcXFwiXFxcIiwgW2NvbmNhdChcXFwiLlxcXCIsIHBhcnRzKV0pLFxcblxcdFxcXCJVc2UgY29tLmFtYXpvbmF3cy48cmVnaW9uPi5zMyBvciAuZHluYW1vZGIsIG9yIHN3aXRjaCBWcGNFbmRwb2ludFR5cGUgdG8gSW50ZXJmYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcHJpdmF0ZWxpbmsvZ2F0ZXdheS1lbmRwb2ludHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0X3BmX2VjMnZnc19nYXRld2F5KG5hbWUpXFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0bm90IHBhcnRzWzNdIGluIHtcXFwiczNcXFwiLCBcXFwiZHluYW1vZGJcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGNlLXNlcnZpY2UtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlZQQyBlbmRwb2ludCBzZXJ2aWNlIG5hbWVzIG11c3QgdXNlIHRoZSBkZXBsb3kgcmVnaW9uIHVubGVzcyBTZXJ2aWNlUmVnaW9uIGlzIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZzcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3ByaXZhdGVsaW5rL3ByaXZhdGVsaW5rLWFjY2Vzcy1hd3Mtc2VydmljZXMuaHRtbFxcXCJcXG5cXG4jIE9ubHkgY29tLmFtYXpvbmF3cy48cmVnaW9uPi48c2VydmljZT4gbmFtZXMgd2hlcmUgdGhlIHRoaXJkIHNlZ21lbnQgaXNcXG4jIHJlZ2lvbi1zaGFwZWQ7IG5hbWVzIGxpa2UgY29tLmFtYXpvbmF3cy5zMy1nbG9iYWwuYWNjZXNzcG9pbnQgc3RheSBvdXQuXFxuX3BmX2VjMnZzcl9wYXJ0cyhuYW1lKSA6PSBwYXJ0cyBpZiB7XFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0cmVnZXgubWF0Y2goYF5bYS16XXsyfSgtW2Etel0rKSstWzAtOV0rJGAsIHBhcnRzWzJdKVxcbn1cXG5cXG5fcGZfZWMydnNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1zZXJ2aWNlLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkVuZHBvaW50IHNlcnZpY2UgJyVzJyBuYW1lcyByZWdpb24gJXMgYnV0IHRoaXMgc3RhY2sgZGVwbG95cyB0byAlczsgd2l0aG91dCBTZXJ2aWNlUmVnaW9uIHRoZSBsb29rdXAgaXMgcmVnaW9uYWwgYW5kIHRoZSBjcmVhdGUgZmFpbHNcXFwiLCBbY29uY2F0KFxcXCIuXFxcIiwgcGFydHMpLCBwYXJ0c1syXSwgcmVnaW9uXSksXFxuXFx0XFxcIlVzZSBjb20uYW1hem9uYXdzLjxkZXBsb3ktcmVnaW9uPi48c2VydmljZT4sIG9yIHNldCBTZXJ2aWNlUmVnaW9uIGZvciBjcm9zcy1yZWdpb24gUHJpdmF0ZUxpbmtcXFwiLFxcblxcdF9wZl9lYzJ2c3JfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHBhcnRzIDo9IF9wZl9lYzJ2c3JfcGFydHMobmFtZSlcXG5cXHRwYXJ0c1syXSAhPSByZWdpb25cXG5cXHRfcGZfZWMydnNyX2Fic2VudChuYW1lLCBcXFwiU2VydmljZVJlZ2lvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0SWRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEdhdGV3YXkgZW5kcG9pbnRzIChhbmQgUm91dGVUYWJsZUlkcyBvbmx5IG9uIEdhdGV3YXkpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydnRjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLXZwY2VuZHBvaW50Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMnZ0Y190eXBlKG5hbWUpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0VuZHBvaW50VHlwZVxcXCIsIFxcXCJHYXRld2F5XFxcIilcXG59XFxuXFxuX3BmX2VjMnZ0Y19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldElkc1xcXCIsXFxuXFx0XFxcIkEgR2F0ZXdheSBlbmRwb2ludCBjYW5ub3QgdGFrZSBTdWJuZXRJZHMgKFxcXFxcXFwiU3VibmV0IElEcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIEludGVyZmFjZSBhbmQgR2F0ZXdheUxvYWRCYWxhbmNlciB0eXBlIFZQQyBFbmRwb2ludHMuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFN1Ym5ldElkcywgb3Igc2V0IFZwY0VuZHBvaW50VHlwZTogSW50ZXJmYWNlXFxcIixcXG5cXHRfcGZfZWMydnRjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRfcGZfZWMydnRjX3R5cGUobmFtZSkgPT0gXFxcIkdhdGV3YXlcXFwiXFxuXFx0X3BmX2VjMnZ0Y19oYXMobmFtZSwgXFxcIlN1Ym5ldElkc1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlVGFibGVJZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgJXMgZW5kcG9pbnQgY2Fubm90IHRha2UgUm91dGVUYWJsZUlkczsgb25seSBHYXRld2F5IGVuZHBvaW50cyBhdHRhY2ggdG8gcm91dGUgdGFibGVzXFxcIiwgW3RdKSxcXG5cXHRcXFwiUmVtb3ZlIFJvdXRlVGFibGVJZHMsIG9yIHNldCBWcGNFbmRwb2ludFR5cGU6IEdhdGV3YXlcXFwiLFxcblxcdF9wZl9lYzJ2dGNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHQgOj0gX3BmX2VjMnZ0Y190eXBlKG5hbWUpXFxuXFx0dCAhPSBcXFwiR2F0ZXdheVxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRfcGZfZWMydnRjX2hhcyhuYW1lLCBcXFwiUm91dGVUYWJsZUlkc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNsdXN0ZXItbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1MgY2x1c3RlciBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpDbHVzdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY2x1c3Rlci1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbHVzdGVyTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2x1c3Rlck5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6Q2x1c3RlclxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNsdXN0ZXJOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1jb2RlZGVwbG95LWxiXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPREVfREVQTE9ZIGRlcGxveW1lbnQgY29udHJvbGxlciByZXF1aXJlcyBhIGxvYWQgYmFsYW5jZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGaXJlcyBvbiBhIG1pc3Npbmcga2V5IG9yIGEgcHJlc2VudC1idXQtZW1wdHkgbGlzdDsgYW4gdW5yZXNvbHZhYmxlXFxuIyBMb2FkQmFsYW5jZXJzIHZhbHVlIHN0YXlzIHNpbGVudCAobWFya2VyIG9iamVjdHMgYXJlIFxcXCJwcmVzZW50XFxcIikuXFxuX3BmX2Vjc2NkbGJfbm9uZShuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkxvYWRCYWxhbmNlcnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9lY3NjZGxiX25vbmUobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGxicyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTG9hZEJhbGFuY2Vyc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkobGJzKVxcblxcdGNvdW50KGxicykgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWNvZGVkZXBsb3ktbGJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyXFxcIixcXG5cXHRcXFwiRGVwbG95bWVudENvbnRyb2xsZXIgaXMgQ09ERV9ERVBMT1kgYnV0IG5vIExvYWRCYWxhbmNlcnMgYXJlIGNvbmZpZ3VyZWQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcInRoZSBzZXJ2aWNlIHJlcXVpcmVzIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBMb2FkQmFsYW5jZXJzIGVudHJ5IHdpdGggYSB0YXJnZXQgZ3JvdXAsIG9yIHVzZSB0aGUgRUNTIGNvbnRyb2xsZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyLlR5cGVcXFwiKSA9PSBcXFwiQ09ERV9ERVBMT1lcXFwiXFxuXFx0X3BmX2Vjc2NkbGJfbm9uZShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWRhZW1vbi1kZXNpcmVkLWNvdW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRBRU1PTiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IGFjY2VwdCBEZXNpcmVkQ291bnRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZXNpcmVkQ291bnQgMCBmYWlscyB0b28gKHN2MDNiKSAtIGFueSBwcmVzZW5jZSBvZiB0aGUga2V5IGlzIHRoZSB2aW9sYXRpb24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1kYWVtb24tZGVzaXJlZC1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENvdW50XFxcIixcXG5cXHRcXFwiU2NoZWR1bGluZ1N0cmF0ZWd5IGlzIERBRU1PTiBidXQgRGVzaXJlZENvdW50IGlzIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IHN1cHBvcnQgYSBkZXNpcmVkIGNvdW50IGZvciBzZXJ2aWNlc1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIERlc2lyZWRDb3VudCBmcm9tIERBRU1PTiBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZWR1bGluZ1N0cmF0ZWd5XFxcIikgPT0gXFxcIkRBRU1PTlxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRub3Qgb2JqZWN0LmdldChwcm9wcywgXFxcIkRlc2lyZWRDb3VudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1kZXBsb3ltZW50LXBlcmNlbnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVwbG95bWVudENvbmZpZ3VyYXRpb24gcGVyY2VudCBib3VuZHMgKG1pbiA8PSAxMDAsIG1heCA+PSAxMDApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZGVwbG95bWVudC1wZXJjZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NaW5pbXVtSGVhbHRoeVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1IZWFsdGh5UGVyY2VudCAldiBleGNlZWRzIDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWluaW11bUhlYWx0aHlQZXJjZW50IG11c3QgYmUgYXQgbW9zdCAxMDBcXFxcXFxcIlxcXCIsIFttaW5wXSksXFxuXFx0XFxcIktlZXAgTWluaW11bUhlYWx0aHlQZXJjZW50IGF0IDEwMCBvciBiZWxvd1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdG1pbnAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWluaW11bUhlYWx0aHlQZXJjZW50XFxcIikpXFxuXFx0bWlucCA+IDEwMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWRlcGxveW1lbnQtcGVyY2VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWF4aW11bVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heGltdW1QZXJjZW50ICV2IGlzIGJlbG93IDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWF4aW11bVBlcmNlbnQgbXVzdCBiZSBhdCBsZWFzdCAxMDBcXFxcXFxcIlxcXCIsIFttYXhwXSksXFxuXFx0XFxcIktlZXAgTWF4aW11bVBlcmNlbnQgYXQgMTAwIG9yIGFib3ZlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bWF4cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NYXhpbXVtUGVyY2VudFxcXCIpKVxcblxcdG1heHAgPCAxMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1mYXJnYXRlLXBsYWNlbWVudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQbGFjZW1lbnQgY29uc3RyYWludHMgYW5kIHN0cmF0ZWdpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gRkFSR0FURVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWZhcmdhdGUtcGxhY2VtZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2tleV0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBidXQgdGhlIEZBUkdBVEUgbGF1bmNoIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YXNrIHBsYWNlbWVudDsgQ3JlYXRlU2VydmljZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtrZXldKSxcXG5cXHRcXFwiUmVtb3ZlIHBsYWNlbWVudCBjb25zdHJhaW50cy9zdHJhdGVnaWVzIGZyb20gRmFyZ2F0ZSBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVHlwZVxcXCIpID09IFxcXCJGQVJHQVRFXFxcIlxcblxcdHNvbWUga2V5IGluIHtcXFwiUGxhY2VtZW50Q29uc3RyYWludHNcXFwiLCBcXFwiUGxhY2VtZW50U3RyYXRlZ2llc1xcXCJ9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBba2V5XSkpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGF1bmNoLXR5cGUtY2FwYWNpdHktcHJvdmlkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGF1bmNoVHlwZSBhbmQgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1sYXVuY2gtdHlwZS1jYXBhY2l0eS1wcm92aWRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUeXBlICclcycgYW5kIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneSBjYW5ub3QgYm90aCBiZSBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlNwZWNpZnlpbmcgYm90aCBhIGxhdW5jaCB0eXBlIGFuZCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbbHRdKSxcXG5cXHRcXFwiUmVtb3ZlIExhdW5jaFR5cGUgb3IgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5MYXVuY2hUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcobHQpXFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneVxcXCIpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGxvYWQgYmFsYW5jZXIgZW50cnkgdGFrZXMgZWl0aGVyIFRhcmdldEdyb3VwQXJuIG9yIExvYWRCYWxhbmNlck5hbWUsIG5vdCBib3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2Vyc1xcXCIsXFxuXFx0XFxcIkEgTG9hZEJhbGFuY2VycyBlbnRyeSBzZXRzIGJvdGggVGFyZ2V0R3JvdXBBcm4gYW5kIExvYWRCYWxhbmNlck5hbWU7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcImxvYWRCYWxhbmNlck5hbWUgYW5kIHRhcmdldEdyb3VwQXJuIGNhbm5vdCBib3RoIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBvZiBUYXJnZXRHcm91cEFybiAoQUxCL05MQikgb3IgTG9hZEJhbGFuY2VyTmFtZSAoQ0xCKSBwZXIgZW50cnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlcnNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0bm90IG9iamVjdC5nZXQoZW50cnksIFxcXCJUYXJnZXRHcm91cEFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRub3Qgb2JqZWN0LmdldChlbnRyeSwgXFxcIkxvYWRCYWxhbmNlck5hbWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1Mgc2VydmljZSBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiU2VydmljZU5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTmV0d29ya0NvbmZpZ3VyYXRpb24gcmVxdWlyZXMgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lIHNoaXBzIEUzMDUyIGZvciB0aGUgaW52ZXJzZSAoYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiB3aXRob3V0XFxuIyBOZXR3b3JrQ29uZmlndXJhdGlvbik7IHRoaXMgZGlyZWN0aW9uIGlzIHVuZ3VhcmRlZC4gT25seSBhbiBleHBsaWNpdFxcbiMgbm9uLWF3c3ZwYyBOZXR3b3JrTW9kZSBmaXJlcyAtIHRoZSBhYnNlbnQtbW9kZSBkZWZhdWx0IGlzIHVuYmVuY2hlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IHRoZSByZWZlcmVuY2VkIHRhc2sgZGVmaW5pdGlvbiB1c2VzIE5ldHdvcmtNb2RlICclcyc7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIk5ldHdvcmsgQ29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgZm9yIHRoZSBnaXZlbiBuZXR3b3JrTW9kZSBvZiB0aGlzIHRhc2sgZGVmaW5pdGlvbi5cXFxcXFxcIlxcXCIsIFtubV0pLFxcblxcdFxcXCJVc2UgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiwgb3IgZHJvcCBOZXR3b3JrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0dGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dGQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0bm0gOj0gcmVzb2x2ZSh0ZCwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLXBsYXRmb3JtLXZlcnNpb24tZWMyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBsYXRmb3JtVmVyc2lvbiBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBFQzIgbGF1bmNoIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1wbGF0Zm9ybS12ZXJzaW9uLWVjMlxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGxhdGZvcm1WZXJzaW9uXFxcIixcXG5cXHRcXFwiTGF1bmNoVHlwZSBpcyBFQzIgYnV0IFBsYXRmb3JtVmVyc2lvbiBpcyBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgbnVsbCB3aGVuIHNwZWNpZnlpbmcgYW4gRUMyIGxhdW5jaCB0eXBlXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUGxhdGZvcm1WZXJzaW9uIChpdCBhcHBsaWVzIHRvIEZhcmdhdGUgb25seSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFR5cGVcXFwiKSA9PSBcXFwiRUMyXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUGxhdGZvcm1WZXJzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy10YXNrZGVmLWZhbWlseVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXNrIGRlZmluaXRpb24gRmFtaWx5IGFsbG93cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtdGFza2RlZi1mYW1pbHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZhbWlseVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRmFtaWx5ICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmFtaWx5XFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VycyBuZWVkIGF0IGxlYXN0IHR3byBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJzY19hbGIobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIikgPT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VyIGxpc3RzICV2IHN1Ym5ldChzKTsgRUxCIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBpbiBkaWZmZXJlbnQgQVpzIChcXFxcXFxcIkF0IGxlYXN0IHR3byBzdWJuZXRzIGluIHR3byBkaWZmZXJlbnQgQXZhaWxhYmlsaXR5IFpvbmVzIG11c3QgYmUgc3BlY2lmaWVkXFxcXFxcXCIpXFxcIiwgW2NvdW50KHN1YnMpXSksXFxuXFx0XFxcIkxpc3QgdHdvIG9yIG1vcmUgc3VibmV0cyBmcm9tIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0X3BmX2VsYnNjX2FsYihuYW1lKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHN1YnMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlN1Ym5ldHNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KHN1YnMpXFxuXFx0Y291bnQoc3VicykgPCAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiYXBwX2Nvb2tpZSBzdGlja2luZXNzIHJlcXVpcmVzIGEgY29va2llIG5hbWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxiYWNuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuX3BmX2VsYmFjbl9oYXMobmFtZSwga2V5KSBpZiBfcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJzdGlja2luZXNzLnR5cGUgYXBwX2Nvb2tpZSBoYXMgbm8gc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIChcXFxcXFxcIllvdSBtdXN0IHNldCBhbiBhcHBsaWNhdGlvbiBjb29raWUgbmFtZSB0byBlbmFibGUgc3RpY2tpbmVzcyBvZiB0eXBlICdhcHBfY29va2llJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkFkZCB0aGUgc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIGF0dHJpYnV0ZVxcXCIsXFxuXFx0X3BmX2VsYmFjbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdF9wZl9lbGJhY25fYXR0cihuYW1lLCBcXFwic3RpY2tpbmVzcy5lbmFibGVkXFxcIikgPT0gXFxcInRydWVcXFwiXFxuXFx0X3BmX2VsYmFjbl9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwiYXBwX2Nvb2tpZVxcXCJcXG5cXHRub3QgX3BmX2VsYmFjbl9oYXMobmFtZSwgXFxcInN0aWNraW5lc3MuYXBwX2Nvb2tpZS5jb29raWVfbmFtZVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItaGMtdGltZW91dC1pbnRlcnZhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhlYWx0aCBjaGVjayB0aW1lb3V0IG11c3QgYmUgc3RyaWN0bHkgc21hbGxlciB0aGFuIHRoZSBpbnRlcnZhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXF1YWxpdHkgaXMgcmVqZWN0ZWQgdG9vIChiZW5jaGVkKTogdGhlIHJlcXVpcmVtZW50IGlzIHN0cmljdGx5IGxlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1oYy10aW1lb3V0LWludGVydmFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzICV2IGlzIG5vdCBzbWFsbGVyIHRoYW4gSGVhbHRoQ2hlY2tJbnRlcnZhbFNlY29uZHMgJXYgKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHRpbWVvdXQgJyV2JyBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgaW50ZXJ2YWwgJyV2J1xcXFxcXFwiKVxcXCIsIFt0LCBpLCB0LCBpXSksXFxuXFx0XFxcIktlZXAgdGhlIHRpbWVvdXQgc3RyaWN0bHkgYmVsb3cgdGhlIGludGVydmFsXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrVGltZW91dFNlY29uZHNcXFwiKSlcXG5cXHRpIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrSW50ZXJ2YWxTZWNvbmRzXFxcIikpXFxuXFx0dCA+PSBpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGFtYmRhLXRhcmdldC1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSB0YXJnZXQgZ3JvdXBzIGNhbm5vdCBzcGVjaWZ5IFByb3RvY29sXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYW1iZGEtdGFyZ2V0LXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0XFxcIlRhcmdldFR5cGUgbGFtYmRhIGNhbm5vdCB0YWtlIFByb3RvY29sIChcXFxcXFxcIlByb3RvY29sIGNhbm5vdCBiZSBzcGVjaWZpZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0YXJnZXQgdHlwZSAnbGFtYmRhJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm90b2NvbCBmcm9tIHRoZSBsYW1iZGEgdGFyZ2V0IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldFR5cGVcXFwiKSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm90b2NvbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTG9hZCBiYWxhbmNlciBuYW1lcyBhcmUgYXQgbW9zdCAzMiBhbHBoYW51bWVyaWMvaHlwaGVuIGNoYXJzIGFuZCBjYW5ub3QgYmVnaW4gd2l0aCBpbnRlcm5hbC0gb3IgYSBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VsYm5hbWVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiXFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0c3RhcnRzd2l0aChuLCBcXFwiaW50ZXJuYWwtXFxcIilcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZWdpbiB3aXRoICdpbnRlcm5hbC0nXFxcIlxcbn1cXG5cXG5fcGZfZWxibmFtZV9iYWQgY29udGFpbnMgW25hbWUsIG4sIHdoeV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRlbmRzd2l0aChuLCBcXFwiLVxcXCIpXFxuXFx0d2h5IDo9IFxcXCJjYW5ub3QgZW5kIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdHN0YXJ0c3dpdGgobiwgXFxcIi1cXFwiKVxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlZ2luIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGNvdW50KG4pID4gMzJcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZSBsb25nZXIgdGhhbiAnMzInIGNoYXJhY3RlcnNcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTktXSokYCwgbilcXG5cXHR3aHkgOj0gXFxcImNhbiBvbmx5IGNvbnRhaW4gY2hhcmFjdGVycyB0aGF0IGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucygtKVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgbG9hZCBiYWxhbmNlciBuYW1lICclcycgJXM7IEVMQiByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtuLCB3aHldKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljIG9yIGh5cGhlbiBjaGFyYWN0ZXJzLCB3aXRob3V0IGEgbGVhZGluZy90cmFpbGluZyBoeXBoZW4gb3IgdGhlIHJlc2VydmVkIGludGVybmFsLSBwcmVmaXhcXFwiLFxcblxcdF9wZl9lbGJuYW1lX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIG4sIHdoeV0gaW4gX3BmX2VsYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGlzdGVuZXItcHJvdG9jb2wtbGItdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpc3RlbmVyIHByb3RvY29scyBtdXN0IG1hdGNoIHRoZSBsb2FkIGJhbGFuY2VyIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFsbG93LXNldHMgdmVyYmF0aW0gZnJvbSB0aGUgdHdvIGJlbmNoZWQgc2VydmljZSBlcnJvcnMuXFxuX3BmX2VsYmxwdF9hbGxvdyA6PSB7XFxcImFwcGxpY2F0aW9uXFxcIjoge1xcXCJIVFRQXFxcIiwgXFxcIkhUVFBTXFxcIn0sIFxcXCJuZXR3b3JrXFxcIjoge1xcXCJUQ1BcXFwiLCBcXFwiUVVJQ1xcXCIsIFxcXCJUQ1BfUVVJQ1xcXCIsIFxcXCJVRFBcXFwiLCBcXFwiVENQX1VEUFxcXCIsIFxcXCJUTFNcXFwifX1cXG5cXG5fcGZfZWxibHB0X3R5cGUobGIpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tsYl0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1saXN0ZW5lci1wcm90b2NvbC1sYi10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTGlzdGVuZXIgcHJvdG9jb2wgJyVzJyBpcyBub3QgdmFsaWQgZm9yIGEgJXMgbG9hZCBiYWxhbmNlciAoYWxsb3dlZDogJXYpXFxcIiwgW3Byb3RvLCB0LCBhbGxvd10pLFxcblxcdFxcXCJVc2UgSFRUUC9IVFRQUyBvbiBhcHBsaWNhdGlvbiBMQnMgYW5kIFRDUC9VRFAvVExTL1FVSUMgdmFyaWFudHMgb24gbmV0d29yayBMQnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGlzdGVuZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcXFwiKVxcblxcdGxiIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXJuXFxcIilcXG5cXHRsYiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdHQgOj0gX3BmX2VsYmxwdF90eXBlKGxiKVxcblxcdGFsbG93IDo9IF9wZl9lbGJscHRfYWxsb3dbdF1cXG5cXHRwcm90byA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIilcXG5cXHRpc19zdHJpbmcocHJvdG8pXFxuXFx0bm90IHByb3RvIGluIGFsbG93XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItcnVsZS1wcmlvcml0eS11bmlxdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaXN0ZW5lciBydWxlcyBvbiB0aGUgc2FtZSBsaXN0ZW5lciBtdXN0IGhhdmUgZGlzdGluY3QgcHJpb3JpdGllc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIHJlc29sdmUoKSB0dXJucyBhIFJlZi9HZXRBdHQgdG8gYSBzaWJsaW5nIGxpc3RlbmVyIGludG8gaXRzIGxvZ2ljYWxcXG4jIGlkLCBzbyBib3RoIFJlZi13aXJlZCBhbmQgaWRlbnRpY2FsLWxpdGVyYWwgTGlzdGVuZXJBcm5zIGNvbXBhcmUgZXF1YWwuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1ydWxlLXByaW9yaXR5LXVuaXF1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIHIyLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByaW9yaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmlvcml0eSAldiBpcyBhbHNvIHVzZWQgYnkgJyVzJyBvbiB0aGUgc2FtZSBsaXN0ZW5lciAoXFxcXFxcXCJQcmlvcml0eSAnJXYnIGlzIGN1cnJlbnRseSBpbiB1c2VcXFxcXFxcIilcXFwiLCBbcDEsIHIxLCBwMV0pLFxcblxcdFxcXCJHaXZlIGVhY2ggcnVsZSBvbiBhIGxpc3RlbmVyIGEgZGlzdGluY3QgcHJpb3JpdHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcjEgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXFxcIilcXG5cXHRzb21lIHIyIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZVxcXCIpXFxuXFx0cjEgPCByMlxcblxcdGwxIDo9IHJlc29sdmUocjEsIFxcXCJQcm9wZXJ0aWVzLkxpc3RlbmVyQXJuXFxcIilcXG5cXHRsMiA6PSByZXNvbHZlKHIyLCBcXFwiUHJvcGVydGllcy5MaXN0ZW5lckFyblxcXCIpXFxuXFx0bDEgPT0gbDJcXG5cXHRwMSA6PSB0b19udW1iZXIocmVzb2x2ZShyMSwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMiA6PSB0b19udW1iZXIocmVzb2x2ZShyMiwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMSA9PSBwMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXN0aWNraW5lc3MtdHlwZS1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN0aWNraW5lc3MgdHlwZSBsYl9jb29raWUgbmVlZHMgYW4gSFRUUC1wcm90b2NvbCB0YXJnZXQgZ3JvdXAsIHNvdXJjZV9pcCBhIFRDUCBvbmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxic3RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxic3RwX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuIyBPbmx5IHRoZSB0d28gYmVuY2hlZCBwYWlycyBhcmUgY2xhaW1lZC5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcImxiX2Nvb2tpZVxcXCIsIFxcXCJUQ1BcXFwiXSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxuXFx0X3BmX2VsYnN0cF9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwibGJfY29va2llXFxcIlxcbn1cXG5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcInNvdXJjZV9pcFxcXCIsIFxcXCJIVFRQXFxcIl0gaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG5cXHRfcGZfZWxic3RwX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJzb3VyY2VfaXBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItc3RpY2tpbmVzcy10eXBlLXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0aWNraW5lc3MgdHlwZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0aGUgJXMgcHJvdG9jb2xcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJVc2Ugc291cmNlX2lwIHN0aWNraW5lc3MgZm9yIFRDUCB0YXJnZXQgZ3JvdXBzIGFuZCBjb29raWUgc3RpY2tpbmVzcyBmb3IgSFRUUCBvbmVzXFxcIixcXG5cXHRfcGZfZWxic3RwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0cGFpciA6PSBfcGZfZWxic3RwX2JhZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRDUCBoZWFsdGggY2hlY2tzIGNhbm5vdCB0YWtlIGEgaGVhbHRoIGNoZWNrIHBhdGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxidGNocF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYXJnZXRHcm91cC5odG1sXFxcIlxcblxcbl9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcblxcbiMgSGVhbHRoQ2hlY2tQcm90b2NvbCBkZWZhdWx0cyB0byB0aGUgdGFyZ2V0IGdyb3VwIHByb3RvY29sIChiZW5jaGVkIHZpYSBlMDRiKS5cXG5fcGZfZWxidGNocF90Y3BfaGMobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJIZWFsdGhDaGVja1Byb3RvY29sXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tQYXRoXFxcIixcXG5cXHRcXFwiVGhlIGVmZmVjdGl2ZSBoZWFsdGggY2hlY2sgcHJvdG9jb2wgaXMgVENQLCB3aGljaCBjYW5ub3QgdGFrZSBIZWFsdGhDaGVja1BhdGggKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHBhdGhzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBUQ1AgaGVhbHRoIGNoZWNrc1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBIZWFsdGhDaGVja1BhdGgsIG9yIHVzZSBhbiBIVFRQL0hUVFBTIGhlYWx0aCBjaGVjayBwcm90b2NvbFxcXCIsXFxuXFx0X3BmX2VsYnRjaHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRfcGZfZWxidGNocF90Y3BfaGMobmFtZSlcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiSGVhbHRoQ2hlY2tQYXRoXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPiAzNjAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzYwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI2RlcmVnaXN0cmF0aW9uLWRlbGF5XFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzXFxcIlxcblxcdG51bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhdHRyLCBcXFwiVmFsdWVcXFwiLCBudWxsKSlcXG5cXHRfcGZfZGVyZWdfZGVsYXlfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIG5hbWVzIGFyZSBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYy9oeXBoZW4gY2hhcnMgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMzIgY2hhcmFjdGVyc1xcXCIgaWYgY291bnQobikgPiAzMlxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJtYXkgdXNlIG9ubHkgYWxwaGFudW1lcmljcyBhbmQgaHlwaGVucywgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblxcXCIgaWYge1xcblxcdGNvdW50KG4pIDw9IDMyXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV0oW0EtWmEtejAtOS1dKltBLVphLXowLTldKT8kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgdGFyZ2V0IGdyb3VwIG5hbWUgJyVzJyAlczsgRUxCIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW24sIHdoeV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIHRhcmdldCBncm91cCB0byBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYyBvciBoeXBoZW4gY2hhcmFjdGVycywgbm90IHN0YXJ0aW5nIG9yIGVuZGluZyB3aXRoIGEgaHlwaGVuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0d2h5IDo9IF9wZl90Z25hbWVfYmFkKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+IDBcXG5cXHRuIDwgMzBcXG59XFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPiA5MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLXNsb3ctc3RhcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgMCAoZGlzYWJsZWQpIG9yIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgc2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzIHRvIDAgb3IgYSB2YWx1ZSBiZXR3ZWVuIDMwIGFuZCA5MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNzbG93LXN0YXJ0LW1vZGVcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9zbG93X3N0YXJ0X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLWlucHV0LXRyYW5zZm9ybWVyLXBsYWNlaG9sZGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcImV2ZW50c1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnB1dFRlbXBsYXRlIHBsYWNlaG9sZGVycyBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSA8cGxhY2Vob2xkZXI+IGluIElucHV0VGVtcGxhdGUgbXVzdCBiZSBkZWNsYXJlZCBpbiBJbnB1dFBhdGhzTWFwLFxcbiMgZXhjZXB0IHRoZSBhd3MuZXZlbnRzLiogcHJlZGVmaW5lZCB2YXJpYWJsZXMuIEFuIElucHV0UGF0aHNNYXAgdGhhdCBpcyBhblxcbiMgdW5yZXNvbHZhYmxlIGludHJpbnNpYyAobm9ybWFsaXplZCB3aXRoIF9fLXByZWZpeGVkIG1hcmtlciBrZXlzKSBtYWtlcyB0aGVcXG4jIGRlY2xhcmVkIHNldCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpIDo9IHtzdWJzdHJpbmcoZiwgMSwgY291bnQoZikgLSAyKSB8IHNvbWUgZiBpbiByZWdleC5maW5kX24oYDwoW0EtWmEtejAtOV8uLV0rKT5gLCB0bXBsLCAtMSl9XFxuXFxuX3BmX2V2aXRwX3BsYWluX21hcChwbSkgaWYge1xcblxcdGlzX29iamVjdChwbSlcXG5cXHRldmVyeSBrLCBfIGluIHBtIHtcXG5cXHRcXHRub3Qgc3RhcnRzd2l0aChrLCBcXFwiX19cXFwiKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhcmdldHMuJWQuSW5wdXRUcmFuc2Zvcm1lci5JbnB1dFRlbXBsYXRlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJJbnB1dFRlbXBsYXRlIHVzZXMgPCVzPiBidXQgSW5wdXRQYXRoc01hcCBkb2VzIG5vdCBkZWNsYXJlIGl0OyBQdXRUYXJnZXRzIGZhaWxzIHdpdGggXFxcXFxcXCJJbnB1dFRlbXBsYXRlIGZvciB0YXJnZXQgJXMgY29udGFpbnMgaW52YWxpZCBwbGFjZWhvbGRlciAlc1xcXFxcXFwiXFxcIiwgW3AsIHRpZCwgcF0pLFxcblxcdHNwcmludGYoXFxcIkFkZCAnJXMnIHRvIElucHV0UGF0aHNNYXAsIG9yIHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIgZnJvbSB0aGUgdGVtcGxhdGVcXFwiLCBbcF0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi10cmFuc2Zvcm0tdGFyZ2V0LWlucHV0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRzXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRpdCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJbnB1dFRyYW5zZm9ybWVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaXQpXFxuXFx0dG1wbCA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRUZW1wbGF0ZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRtcGwpXFxuXFx0cG0gOj0gb2JqZWN0LmdldChpdCwgXFxcIklucHV0UGF0aHNNYXBcXFwiLCB7fSlcXG5cXHRfcGZfZXZpdHBfcGxhaW5fbWFwKHBtKVxcblxcdHNvbWUgcCBpbiBfcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpXFxuXFx0bm90IHN0YXJ0c3dpdGgocCwgXFxcImF3cy5ldmVudHMuXFxcIilcXG5cXHRub3QgcG1bcF1cXG5cXHR0aWQgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiSWRcXFwiLCBcXFwiPHRhcmdldD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIGVtcHR5IEV2ZW50UGF0dGVybiBjb3VudHMgYXMgbm8gcGF0dGVybiBhdCBhbGxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRjMwNTggZmlyZXMgd2hlbiB0aGUgRXZlbnRQYXR0ZXJuIEtFWSBpcyBhYnNlbnQsIGJ1dCBhbiBlbXB0eVxcbiMgb2JqZWN0IHBhc3NlcyB0aGUgc2NoZW1hIGFuZCB0aGUgaGFuZGxlciB0aGVuIHRyZWF0cyBpdCBhcyBubyBwYXR0ZXJuIGF0XFxuIyBhbGwuIEZpcmVzIG9ubHkgd2hlbiBTY2hlZHVsZUV4cHJlc3Npb24gaXMgYWxzbyBsaXRlcmFsbHkgYWJzZW50IOKAlCB0aGVcXG4jIGJlbmNoLXZlcmlmaWVkIHNoYXBlIChhYnNlbmNlIHByb3ZlbiB2aWEgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiLFxcblxcdFxcXCJFdmVudFBhdHRlcm4gaXMgYW4gZW1wdHkgb2JqZWN0LCB3aGljaCB0aGUgaGFuZGxlciB0cmVhdHMgYXMgbm8gcGF0dGVybjsgUHV0UnVsZSBmYWlscyB3aXRoIFxcXFxcXFwiUGFyYW1ldGVyKHMpIEV2ZW50UGF0dGVybiBvciBTY2hlZHVsZUV4cHJlc3Npb24gbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgRXZlbnRQYXR0ZXJuIGF0IGxlYXN0IG9uZSBtYXRjaGVyIChlLmcuIHNvdXJjZSksIG9yIHVzZSBTY2hlZHVsZUV4cHJlc3Npb24gaW5zdGVhZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLWV2ZW50LXBhdHRlcm5zLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiKVxcblxcdGlzX29iamVjdChlcClcXG5cXHRjb3VudChlcCkgPT0gMFxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJTY2hlZHVsZUV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tc2NhbGFyLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZW50IHBhdHRlcm4gdmFsdWVzIG11c3QgYmUgYXJyYXlzIG9yIG9iamVjdHMsIG5vdCBzY2FsYXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkV2ZW50czo6UnVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX2Jvb2xlYW4odilcXG5cXG4jIEV2ZXJ5IG1hdGNoZXIgaW4gYW4gZXZlbnQgcGF0dGVybiBtdXN0IGJlIGFuIGFycmF5IChvciBhbiBvYmplY3QgaG9sZGluZ1xcbiMgb3BlcmF0b3JzKTsgYSBiYXJlIHNjYWxhciBpcyByZWplY3RlZCBwZXIga2V5LiBPbmx5IHRoZSB0b3AgbGV2ZWwgaXNcXG4jIGNoZWNrZWQg4oCUIHRoYXQgaXMgdGhlIGJlbmNoLXZlcmlmaWVkIHNjb3BlLCBhbmQgaXQgZG9kZ2VzIG9wZXJhdG9yIG9iamVjdHNcXG4jIGxpa2Uge1xcXCJwcmVmaXhcXFwiOiBcXFwiLi4uXFxcIn0gdGhhdCBsZWdhbGx5IGNhcnJ5IHNjYWxhcnMgZGVlcGVyIGRvd24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJFdmVudFBhdHRlcm4ga2V5ICclcycgaG9sZHMgYSBiYXJlIHNjYWxhcjsgUHV0UnVsZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJFdmVudCBwYXR0ZXJuIGlzIG5vdCB2YWxpZC4gUmVhc29uOiBcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5XFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdHNwcmludGYoXFxcIldyYXAgdGhlIHZhbHVlIGluIGFuIGFycmF5OiBcXFxcXFxcIiVzXFxcXFxcXCI6IFsuLi5dXFxcIiwgW2tdKSxcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdHNvbWUgaywgdiBpbiBlcFxcblxcdF9wZl9ldnBzdl9zY2FsYXIodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFbmFibGVkIGZvcm1hdCBjb252ZXJzaW9uIG5lZWRzIGlucHV0LCBvdXRwdXQsIGFuZCBzY2hlbWEgY29uZmlnc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGhyZWUgc3ViLWNvbmZpZ3VyYXRpb25zIGFyZSB1bmNvbmRpdGlvbmFsbHkgcmVxdWlyZWQgb25jZSBFbmFibGVkXFxuIyBpcyB0cnVlOyB0aGUgc2VydmljZSByZWplY3RzIGVhY2ggYWJzZW5jZSBpbiB0dXJuLiBSZWFkIGZyb20gdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maGRmY2Nfb3V0ZXIobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG5fcGZfZmhkZmNjX2NvbmYobmFtZSkgOj0gYyBpZiB7XFxuXFx0eCA6PSBfcGZfZmhkZmNjX291dGVyKG5hbWUpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHgsIFxcXCJEYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkRhdGEgZm9ybWF0IGNvbnZlcnNpb24gaXMgZW5hYmxlZCB3aXRob3V0ICVzOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMgbXVzdCBub3QgYmUgbnVsbFxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiU2V0IElucHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgT3V0cHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgYW5kIFNjaGVtYUNvbmZpZ3VyYXRpb24gdG9nZXRoZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS1kYXRhZm9ybWF0Y29udmVyc2lvbmNvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0YyA6PSBfcGZfZmhkZmNjX2NvbmYobmFtZSlcXG5cXHRjb2VyY2VfdG9fYm9vbChvYmplY3QuZ2V0KGMsIFxcXCJFbmFibGVkXFxcIiwgZmFsc2UpKSA9PSB0cnVlXFxuXFx0c29tZSBrIGluIHtcXFwiSW5wdXRGb3JtYXRDb25maWd1cmF0aW9uXFxcIiwgXFxcIk91dHB1dEZvcm1hdENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiU2NoZW1hQ29uZmlndXJhdGlvblxcXCJ9XFxuXFx0b2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctYnVmZmVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgYSA2NCBNQiBidWZmZXIgZmxvb3JcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSBmbG9vciBpcyAxOyB0aGUgNjQgZmxvb3Igb25seSBhcHBsaWVzIHdpdGggZHluYW1pY1xcbiMgcGFydGl0aW9uaW5nIG9uIC0gYSBjb25kaXRpb25hbCBib3VuZCBubyBzY2hlbWEgbGF5ZXIgY2FuIGV4cHJlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1idWZmZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplSW5NQnMgJXYgd2l0aCBkeW5hbWljIHBhcnRpdGlvbmluZzsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkJ1ZmZlcmluZ0hpbnRzLlNpemVJbk1CcyBtdXN0IGJlIGF0IGxlYXN0IDY0IHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZC5cXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlJhaXNlIFNpemVJbk1CcyB0byBhdCBsZWFzdCA2NFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMta2luZXNpc2ZpcmVob3NlLWRlbGl2ZXJ5c3RyZWFtLWR5bmFtaWNwYXJ0aXRpb25pbmdjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EeW5hbWljUGFydGl0aW9uaW5nQ29uZmlndXJhdGlvbi5FbmFibGVkXFxcIikpID09IHRydWVcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIikpXFxuXFx0cyA8IDY0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctcHJlZml4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgcGFydGl0aW9uIG5hbWVzcGFjZXMgaW4gdGhlIHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQYXJ0aXRpb25lZCBkZWxpdmVyeSBoYXMgbm93aGVyZSB0byBwdXQgdGhlIGtleXMgdW5sZXNzIHRoZSBwcmVmaXhcXG4jIGludGVycG9sYXRlcyB0aGVtIHZpYSAhe3BhcnRpdGlvbktleUZyb20uLi59IG5hbWVzcGFjZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1wcmVmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUHJlZml4XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmaXggJyVzJyBoYXMgbm8gcGFydGl0aW9uIG5hbWVzcGFjZTsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFByZWZpeCBzaG91bGQgY29udGFpbiBEeW5hbWljIFBhcnRpdGlvbmluZyBuYW1lc3BhY2VzIHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiSW50ZXJwb2xhdGUgYXQgbGVhc3Qgb25lICF7cGFydGl0aW9uS2V5RnJvbVF1ZXJ5Oi4uLn0gb3IgIXtwYXJ0aXRpb25LZXlGcm9tTGFtYmRhOi4uLn0gaW50byB0aGUgcHJlZml4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ZpcmVob3NlL2xhdGVzdC9kZXYvZHluYW1pYy1wYXJ0aXRpb25pbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkR5bmFtaWNQYXJ0aXRpb25pbmdDb25maWd1cmF0aW9uLkVuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLlByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0bm90IGNvbnRhaW5zKHAsIFxcXCIhe3BhcnRpdGlvbktleVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Uta2luZXNpcy1zb3VyY2UtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbXMgbmVlZCBLaW5lc2lzU3RyZWFtU291cmNlQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoaXMgZGlyZWN0aW9uIGlzIGEgZGVwbG95IGZhaWx1cmUgLSBEaXJlY3RQdXQgd2l0aCBhIChzaWxlbnRseVxcbiMgaWdub3JlZCkgc291cmNlIGNvbmZpZ3VyYXRpb24gZGVwbG95cyBmaW5lIChiZW5jaCBmMDYpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfZmhrc2NfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIktpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWtpbmVzaXMtc291cmNlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJEZWxpdmVyeVN0cmVhbVR5cGUgaXMgS2luZXNpc1N0cmVhbUFzU291cmNlIGJ1dCBubyBzb3VyY2UgY29uZmlndXJhdGlvbiBpcyBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJLaW5lc2lzU291cmNlU3RyZWFtQ29uZmlnIGlzIG1hbmRhdG9yeSBmb3IgS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbSB0eXBlLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIEtpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uIHdpdGggdGhlIHN0cmVhbSBBUk4gYW5kIHJvbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVN0cmVhbVR5cGVcXFwiKSA9PSBcXFwiS2luZXNpc1N0cmVhbUFzU291cmNlXFxcIlxcblxcdF9wZl9maGtzY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Utb25lLWRlc3RpbmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBkZWxpdmVyeSBzdHJlYW0gdGFrZXMgZXhhY3RseSBvbmUgZGVzdGluYXRpb24gY29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGRpcmVjdGlvbnMgZGVwbG95LXZlcmlmaWVkOiBub25lIHNldCwgYW5kIHR3byBzZXQuIEtleSBwcmVzZW5jZSBpc1xcbiMgcmVhZCBmcm9tIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maG9kX2Rlc3RzIDo9IHtcXG5cXHRcXFwiUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVkc2hpZnREZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFbGFzdGljc2VhcmNoRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiQW1hem9ub3BlbnNlYXJjaHNlcnZpY2VEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNwbHVua0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkh0dHBFbmRwb2ludERlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNub3dmbGFrZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkljZWJlcmdEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLW9uZS1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFeGFjdGx5IG9uZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uIGlzIHN1cHBvcnRlZCBmb3IgYSBGaXJlaG9zZVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IGV4YWN0bHkgb25lICpEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZmhvZF9kZXN0czsgb2JqZWN0LmdldChwcm9wcywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImZpcmVob3NlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIFMzIGJhY2t1cCBuZWVkcyBTM0JhY2t1cENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQmFja3VwIG1vZGUgcG9pbnRzIGRlbGl2ZXJpZXMgYXQgYSBzZWNvbmQgYnVja2V0IHRoYXQgbXVzdCBiZVxcbiMgY29uZmlndXJlZC4gU2NvcGVkIHRvIHRoZSBiZW5jaGVkIEV4dGVuZGVkUzMgZGVzdGluYXRpb24uIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maHNiY19vdXRlcihuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5TM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJTM0JhY2t1cE1vZGUgaXMgRW5hYmxlZCBidXQgUzNCYWNrdXBDb25maWd1cmF0aW9uIGlzIG5vdCBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTMyBiYWNrdXAgZGVzdGluYXRpb24gY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCB3aGVuIGVuYWJsaW5nIFMzIGJhY2t1cC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBTM0JhY2t1cENvbmZpZ3VyYXRpb24gKGJ1Y2tldCBhbmQgcm9sZSksIG9yIGRyb3AgUzNCYWNrdXBNb2RlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0tZXh0ZW5kZWRzM2Rlc3RpbmF0aW9uY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUzNCYWNrdXBNb2RlXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0eCA6PSBfcGZfZmhzYmNfb3V0ZXIobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHgsIFxcXCJTM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWlkZW50aXR5LXBvbGljeS1uby1wcmluY2lwYWxcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWNpZXMgY2Fubm90IGNhcnJ5IGEgUHJpbmNpcGFsIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBJZGVudGl0eSBwb2xpY2llcyBhdHRhY2ggdG8gdGhlaXIgcHJpbmNpcGFsIGltcGxpY2l0bHk7IHRoZSBmaWVsZFxcbiMgYmVsb25ncyB0byByZXNvdXJjZS1iYXNlZCBwb2xpY2llcy5cXG5fcGZfaWlucF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lpbnBfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1pZGVudGl0eS1wb2xpY3ktbm8tcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuUHJpbmNpcGFsXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBQcmluY2lwYWwgZmllbGQ7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlBvbGljeSBkb2N1bWVudCBzaG91bGQgbm90IHNwZWNpZnkgYSBwcmluY2lwYWwuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUHJpbmNpcGFsIChpZGVudGl0eSBwb2xpY2llcyBhcHBseSB0byB0aGUgaWRlbnRpdHkgdGhleSBhdHRhY2ggdG8pXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9paW5wX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWlucF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBwb2xpY3kgZG9jdW1lbnRzIGFyZSBsaW1pdGVkIHBlciBpZGVudGl0eSAocm9sZSAxMDI0MCAvIGdyb3VwIDUxMjAgLyB1c2VyIDIwNDggY2hhcmFjdGVycylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2lubGluZV9wb2xpY3lfbGltaXRzIDo9IHtcXG5cXHRcXFwiQVdTOjpJQU06OlBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6Um9sZVBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6VXNlclBvbGljeVxcXCI6IDIwNDgsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFBvbGljeVxcXCI6IDUxMjAsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWlubGluZS1wb2xpY3ktc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvbGljeURvY3VtZW50IGlzICVkIGNoYXJhY3RlcnMgKEpTT04gd2l0aG91dCB3aGl0ZXNwYWNlKSBidXQgdGhlIGlubGluZSBwb2xpY3kgbGltaXQgZm9yICVzIGlzICVkIChyb2xlOiAxMDI0MCwgZ3JvdXA6IDUxMjAsIHVzZXI6IDIwNDgpXFxcIiwgW3NpemUsIHJ0eXBlLCBsaW1pdF0pLFxcblxcdFxcXCJNb3ZlIHN0YXRlbWVudHMgaW50byBtYW5hZ2VkIHBvbGljaWVzIG9yIHNob3J0ZW4gdGhlIGRvY3VtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lubGluZV9wb2xpY3lfbGltaXRzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IGxpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gaW5zdGFuY2UgcHJvZmlsZSBob2xkcyBleGFjdGx5IG9uZSByb2xlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgXFxcInF1b3RhXFxcIiBpcyBhIGhhcmQgbGltaXQgb2Ygb25lIHJvbGU7IHRoZSBzY2hlbWEgaGFzIG5vIG1heEl0ZW1zLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCByb2xlcyBvbiBvbmUgaW5zdGFuY2UgcHJvZmlsZTsgdGhlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQ2Fubm90IGV4Y2VlZCBxdW90YSBmb3IgSW5zdGFuY2VTZXNzaW9uc1Blckluc3RhbmNlUHJvZmlsZTogMVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSByb2xlIHBlciBpbnN0YW5jZSBwcm9maWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtaWFtLWluc3RhbmNlcHJvZmlsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Okluc3RhbmNlUHJvZmlsZVxcXCIpXFxuXFx0biA6PSBjb3VudChmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUm9sZXNcXFwiKSlcXG5cXHRuID4gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljaWVzIHBlciBpZGVudGl0eSBhcmUgY2FwcGVkIChoYXJkIG1heGltdW1zIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODj+ODvOODieS4iumZkO+8iFNlcnZpY2UgUXVvdGFzIOOBruOAjE1heGltdW0gcXVvdGHjgI09IOOBneOCjOS7peS4iuW8leOBjeS4iuOBkuS4jeWPr+iDveOBquWApO+8iTpcXG4jICAgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMO+8iGdyb3VwIOOBryBhZGp1c3RhYmxlOiBmYWxzZeOAgeWun+a4rOOBp+OCgueiuuiqje+8ieOAglxcbiMg44OH44OV44Kp44Or44OI77yIcm9sZSAyMCAvIHVzZXIgMTAgLyBncm91cCAxMO+8iei2heOBr+OCouOCq+OCpuODs+ODiOOBruOCr+OCqeODvOOCv+W8leOBjeS4iuOBkuasoeesrOOBp1xcbiMg5oiQ5Yqf44GX5b6X44KL44Gf44KBIEVSUk9SIOOBq+OBl+OBquOBhO+8iGJlbmNoIOOCouOCq+OCpuODs+ODiOOBriByb2xlPTIwIOOBpyAxMSDlgIvmiJDlip/jgpLlrp/muKzmuIjjgb/vvInjgIJcXG5fcGZfaWFtcG9sX2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlXFxcIjogMjUsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyXFxcIjogMjAsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFxcXCI6IDEwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIG1hbmFnZWQgcG9saWNpZXMgYXJlIGF0dGFjaGVkLCBidXQgdGhlIGhhcmQgbWF4aW11bSBmb3IgJXMgaXMgJWQgKHF1b3RhIGRlZmF1bHRzOiByb2xlIDIwLCB1c2VyIDEwLCBncm91cCAxMDsgcmFpc2FibGUgb25seSB1cCB0byB0aGUgaGFyZCBtYXhpbXVtKTsgZGVwbG95bWVudCBmYWlscyB3aXRoIExpbWl0RXhjZWVkZWRcXFwiLCBbbiwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIkNvbnNvbGlkYXRlIHN0YXRlbWVudHMgaW50byBmZXdlciBtYW5hZ2VkIHBvbGljaWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lhbXBvbF9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YXJyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRuIDo9IGNvdW50KGFycilcXG5cXHRuID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgdG8gNjE0NCBjaGFyYWN0ZXJzICh3aGl0ZXNwYWNlIGV4Y2x1ZGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgbWFuYWdlZCBwb2xpY3kgbGltaXQgaXMgNjE0NFxcXCIsIFtzaXplXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBkb2N1bWVudCBpbnRvIG11bHRpcGxlIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSUFNIGVudGl0eSBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MgYW5kICs9LC5ALV9cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pYW1uYW1lX3BhdCA6PSBgXltBLVphLXowLTkrPSwuQF8tXSskYFxcblxcbl9wZl9pYW1uYW1lX3Byb3AodCwgcHJvcCkgOj0gW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pXFxufVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBfcGZfaWFtbmFtZV9wcm9wKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJSb2xlTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpVc2VyXFxcIiwgXFxcIlVzZXJOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06Okdyb3VwXFxcIiwgXFxcIkdyb3VwTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIiwgXFxcIk1hbmFnZWRQb2xpY3lOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJBV1M6OklBTTo6VXNlclxcXCIsIFxcXCJBV1M6OklBTTo6R3JvdXBcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdHYgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5TmFtZVxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiSUFNIG5hbWUgJyVzJyBpcyByZWplY3RlZDogb25seSBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIGFyZSBhY2NlcHRlZCAobm9uLUFTQ0lJIHRleHQgc3VjaCBhcyBKYXBhbmVzZSBpcyByZWplY3RlZClcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGVudGl0eSB1c2luZyBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIG9ubHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVJvbGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCB2XSBpbiBfcGZfaWFtbmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9ucyBtdXN0IGNhcnJ5IGEgc2VydmljZSBwcmVmaXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgYmFyZSBhY3Rpb24gbmFtZSBoYXMgbm8gc2VydmljZSB0byBhdHRhY2ggdG8uIEludHJpbnNpY3MgaW5zaWRlIHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IGFyZSBtYXJrZXIgb2JqZWN0cywgc28gaXNfc3RyaW5nIG11dGVzIHRoZW0uXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWFmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWFmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIGhhcyBubyBzZXJ2aWNlIHByZWZpeDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiQWN0aW9ucy9Db25kaXRpb25zIG11c3QgYmUgcHJlZmFjZWQgYnkgYSB2ZW5kb3IsIGUuZy4sIGlhbSwgc2RiLCBlYzIsIGV0Yy5cXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIldyaXRlIGFjdGlvbnMgYXMgc2VydmljZTpBY3Rpb24gKGUuZy4gczM6R2V0T2JqZWN0KSwgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWFmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWFmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSBhIGluIF9wZl9pYWZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJBY3Rpb25cXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxuXFx0YSAhPSBcXFwiKlxcXCJcXG5cXHRub3QgY29udGFpbnMoYSwgXFxcIjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktY29uZGl0aW9uLW9wZXJhdG9yXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbmRpdGlvbiBvcGVyYXRvcnMgY29tZSBmcm9tIGEgY2xvc2VkIGdyYW1tYXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJhc2Ugb3BlcmF0b3JzIHBsdXMgdGhlIElmRXhpc3RzIHN1ZmZpeCBhbmQgc2V0LW9wZXJhdG9yIHByZWZpeGVzLlxcbiMgQSB0eXBvIGxpa2UgU3RyaW5nRXF1YWwvU3RyaW5nRXF1YWx6IGlzIHVucmVhY2hhYmxlIGZvciBldmVyeSBvdGhlclxcbiMgbGF5ZXIgYmVjYXVzZSB0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24uXFxuX3BmX2ljb19iYXNlIDo9IHtcXG5cXHRcXFwiU3RyaW5nRXF1YWxzXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc1xcXCIsIFxcXCJTdHJpbmdFcXVhbHNJZ25vcmVDYXNlXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc0lnbm9yZUNhc2VcXFwiLFxcblxcdFxcXCJTdHJpbmdMaWtlXFxcIiwgXFxcIlN0cmluZ05vdExpa2VcXFwiLFxcblxcdFxcXCJOdW1lcmljRXF1YWxzXFxcIiwgXFxcIk51bWVyaWNOb3RFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuXFxcIiwgXFxcIk51bWVyaWNMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIk51bWVyaWNHcmVhdGVyVGhhblxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJEYXRlRXF1YWxzXFxcIiwgXFxcIkRhdGVOb3RFcXVhbHNcXFwiLCBcXFwiRGF0ZUxlc3NUaGFuXFxcIiwgXFxcIkRhdGVMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVHcmVhdGVyVGhhblxcXCIsIFxcXCJEYXRlR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJCb29sXFxcIiwgXFxcIkJpbmFyeUVxdWFsc1xcXCIsIFxcXCJJcEFkZHJlc3NcXFwiLCBcXFwiTm90SXBBZGRyZXNzXFxcIixcXG5cXHRcXFwiQXJuRXF1YWxzXFxcIiwgXFxcIkFybkxpa2VcXFwiLCBcXFwiQXJuTm90RXF1YWxzXFxcIiwgXFxcIkFybk5vdExpa2VcXFwiLCBcXFwiTnVsbFxcXCIsXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2ljb19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuIyBTdHJpcCBhbiBvcHRpb25hbCBGb3JBbGxWYWx1ZXM6L0ZvckFueVZhbHVlOiBwcmVmaXgsIHRoZW4gSWZFeGlzdHMuXFxuX3BmX2ljb191bnByZWZpeGVkKG9wKSA6PSBwYXJ0c1tjb3VudChwYXJ0cykgLSAxXSBpZiBwYXJ0cyA6PSBzcGxpdChvcCwgXFxcIjpcXFwiKVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gc3Vic3RyaW5nKGIsIDAsIGNvdW50KGIpIC0gOCkgaWYge1xcblxcdGIgOj0gX3BmX2ljb191bnByZWZpeGVkKG9wKVxcblxcdGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gYiBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0bm90IGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5Db25kaXRpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkNvbmRpdGlvbiBvcGVyYXRvciAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJVc2UgYSBkb2N1bWVudGVkIG9wZXJhdG9yIChTdHJpbmdFcXVhbHMsIEFybkxpa2UsIC4uLiksIG9wdGlvbmFsbHkgd2l0aCBJZkV4aXN0cyBvciBhIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pY29fZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pY29fc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRjb25kIDo9IG9iamVjdC5nZXQocywgXFxcIkNvbmRpdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjb25kKVxcblxcdHNvbWUgb3AsIF8gaW4gY29uZFxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3QgX3BmX2ljb19yb290KG9wKSBpbiBfcGZfaWNvX2Jhc2VcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhdGVtZW50IElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBwb2xpY3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIHVuaXF1ZW5lc3Mgd2l0aGluIG9uZSBkb2N1bWVudDsgc2VwYXJhdGUgZG9jdW1lbnRzIG1heSByZXVzZVxcbiMgaWRzIGZyZWVseS5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pZHNfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1kdXBsaWNhdGUtc2lkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuU2lkXFxcIiwgW3BhdGgsIGpdKSxcXG5cXHRzcHJpbnRmKFxcXCJTaWQgJyVzJyByZXBlYXRzIHdpdGhpbiBvbmUgcG9saWN5OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTdGF0ZW1lbnQgSURzIChTSUQpIGluIGEgc2luZ2xlIHBvbGljeSBtdXN0IGJlIHVuaXF1ZS5cXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSBzdGF0ZW1lbnQgaW4gdGhlIGRvY3VtZW50IGEgZGlzdGluY3QgU2lkIChvciBkcm9wIHRoZSBkdXBsaWNhdGVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWRzX2RvY3NcXG5cXHRzdG10cyA6PSBfcGZfaWRzX3N0bXRzKGQpXFxuXFx0c29tZSBbaSwgYV0gaW4gc3RtdHNcXG5cXHRzb21lIFtqLCBiXSBpbiBzdG10c1xcblxcdGkgPCBqXFxuXFx0aXNfb2JqZWN0KGEpXFxuXFx0aXNfb2JqZWN0KGIpXFxuXFx0c2lkIDo9IG9iamVjdC5nZXQoYSwgXFxcIlNpZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHNpZClcXG5cXHRzaWQgPT0gb2JqZWN0LmdldChiLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfb3RoZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRWZmZWN0IGlzIGNhc2Utc2Vuc2l0aXZlIEFsbG93IG9yIERlbnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIExvd2VyY2FzZSBlZmZlY3RzIGFyZSBhIGNsYXNzaWMgaGFuZC13cml0dGVuLUpTT04gdHlwbyB0aGUgc2NoZW1hXFxuIyBjYW5ub3Qgc2VlICh0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24pLlxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llY19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWVmZmVjdC1jYXNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuRWZmZWN0XFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJFZmZlY3QgJyVzJyBpcyBub3QgQWxsb3cgb3IgRGVueSAoY2FzZS1zZW5zaXRpdmUpOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJUaGUgcG9saWN5IGZhaWxlZCBsZWdhY3kgcGFyc2luZ1xcXFxcXFwiXFxcIiwgW2VmXSksXFxuXFx0XFxcIlVzZSBFZmZlY3Q6IEFsbG93IG9yIEVmZmVjdDogRGVueVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWVjX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWVjX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0ZWYgOj0gb2JqZWN0LmdldChzLCBcXFwiRWZmZWN0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoZWYpXFxuXFx0bm90IGVmIGluIHtcXFwiQWxsb3dcXFwiLCBcXFwiRGVueVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjdGlvbi9Ob3RBY3Rpb24gYW5kIFJlc291cmNlL05vdFJlc291cmNlIGFyZSBleGNsdXNpdmUgcGFpcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVhY2ggcGFpciBpcyBlaXRoZXItb3IgcGVyIHN0YXRlbWVudDsgYm90aCBhdCBvbmNlIGlzIGEgc3ludGF4IGVycm9yLlxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llZl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuX3BmX2llZl9wYWlycyA6PSB7W1xcXCJBY3Rpb25cXFwiLCBcXFwiTm90QWN0aW9uXFxcIl0sIFtcXFwiUmVzb3VyY2VcXFwiLCBcXFwiTm90UmVzb3VyY2VcXFwiXX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZXhjbHVzaXZlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLiVzXFxcIiwgW3BhdGgsIGksIHBhaXJbMV1dKSxcXG5cXHRzcHJpbnRmKFxcXCJTdGF0ZW1lbnQgc2V0cyBib3RoICVzIGFuZCAlczsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJLZWVwIG9uZSBvZiB0aGUgcGFpciBwZXIgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHBhaXIgaW4gX3BmX2llZl9wYWlyc1xcblxcdG9iamVjdC5nZXQocywgcGFpclswXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgcGFpclsxXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlc291cmNlcyBtdXN0IGJlIEFSTnMgb3IgKlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSBsaXRlcmFsIHN0cmluZ3MgYXJlIGp1ZGdlZCAtIEZuOjpHZXRBdHQgLyBGbjo6U3ViIHZhbHVlcyBzdXJmYWNlXFxuIyBhcyBtYXJrZXIgb2JqZWN0cyBpbiB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChtZWFzdXJlZCksIHNvIHRoZVxcbiMgaXNfc3RyaW5nIGd1YXJkIG11dGVzIHRoZW0uXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaXJmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXJmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXJlc291cmNlLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhbiBBUk47IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlJlc291cmNlICVzIG11c3QgYmUgaW4gQVJOIGZvcm1hdCBvciAnKicuXFxcXFxcXCJcXFwiLCBbciwgcl0pLFxcblxcdFxcXCJVc2UgYSBmdWxsIEFSTiAoYXJuOi4uLikgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXJmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXJmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSByIGluIF9wZl9pcmZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcocilcXG5cXHRyICE9IFxcXCIqXFxcIlxcblxcdG5vdCBzdGFydHN3aXRoKHIsIFxcXCJhcm46XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXNpZC1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IHN0YXRlbWVudCBTaWQgbXVzdCBiZSBhbHBoYW51bWVyaWNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlJvbGVcXFwiLCBcXFwiQVdTOjpJQU06OlVzZXJcXFwiLCBcXFwiQVdTOjpJQU06Okdyb3VwXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfc2lkZm10X3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9zaWRmbXRfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktc2lkLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlNpZFxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiU2lkICclcycgaXMgbm90IGFscGhhbnVtZXJpYzsgSUFNIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiU3RhdGVtZW50IElEcyAoU0lEKSBtdXN0IGJlIGFscGhhLW51bWVyaWNcXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiVXNlIG9ubHkgbGV0dGVycyBhbmQgZGlnaXRzIGluIHRoZSBTaWQgKGRyb3AgaHlwaGVucywgdW5kZXJzY29yZXMgYW5kIHNwYWNlcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9zaWRmbXRfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9zaWRmbXRfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzaWQgOj0gb2JqZWN0LmdldChzLCBcXFwiU2lkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoc2lkKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlswLTlBLVphLXpdKiRgLCBzaWQpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1zdGF0ZW1lbnQtcmVzb3VyY2UtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudHMgbmVlZCBSZXNvdXJjZSBvciBOb3RSZXNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzdGF0ZW1lbnQgc2NvcGVkIHRvIG5vdGhpbmcgaXMgcmVqZWN0ZWQuXFxuX3BmX2lzcnJfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pc3JyX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXN0YXRlbWVudC1yZXNvdXJjZS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiU3RhdGVtZW50IGhhcyBuZWl0aGVyIFJlc291cmNlIG5vciBOb3RSZXNvdXJjZTsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUG9saWN5IHN0YXRlbWVudCBtdXN0IGNvbnRhaW4gcmVzb3VyY2VzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFJlc291cmNlIChhbiBBUk4gb3IgKikgdG8gdGhlIHN0YXRlbWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXNycl9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2lzcnJfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJOb3RSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IFZlcnNpb24gbXVzdCBiZSAyMDEyLTEwLTE3IG9yIDIwMDgtMTAtMTdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB2ZXJzaW9uIHN0cmluZyBpcyBhbiBlbnVtIG9mIHR3byBkYXRlczsgYW55dGhpbmcgZWxzZSBpcyBhIHN5bnRheFxcbiMgZXJyb3IgYXQgY3JlYXRlLlxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlZlcnNpb25cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIlBvbGljeSBWZXJzaW9uICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN5bnRheCBlcnJvcnMgaW4gcG9saWN5LlxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIFZlcnNpb246IDIwMTItMTAtMTdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3ZlcnNpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXB2X2RvY3NcXG5cXHR2IDo9IG9iamVjdC5nZXQoZCwgXFxcIlZlcnNpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCB2IGluIHtcXFwiMjAxMi0xMC0xN1xcXCIsIFxcXCIyMDA4LTEwLTE3XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tdHJ1c3QtcG9saWN5LW5vLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRydXN0IHBvbGljaWVzIGNhbm5vdCBjYXJyeSBhIFJlc291cmNlIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJvbGUgaXRzZWxmIGlzIHRoZSByZXNvdXJjZSBvZiBpdHMgdHJ1c3QgcG9saWN5OyBhbiBleHBsaWNpdFxcbiMgUmVzb3VyY2UgZmllbGQgaXMgcHJvaGliaXRlZC5cXG5fcGZfaXRucl90cnVzdChuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChkKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1uby1yZXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSxcXG5cXHRcXFwiVHJ1c3QgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBSZXNvdXJjZSBmaWVsZDsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJIYXMgcHJvaGliaXRlZCBmaWVsZCBSZXNvdXJjZVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFJlc291cmNlIGZyb20gdGhlIHRydXN0IHBvbGljeSBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0ZCA6PSBfcGZfaXRucl90cnVzdChuYW1lKVxcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pdG5yX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUmVzb3VyY2VcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXJ2aWNlIHByaW5jaXBhbHMgbGl2ZSB1bmRlciBhbWF6b25hd3MuY29tXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU2hhcGUgY2hlY2sgb25seTogZXZlcnkgc2VydmljZSBwcmluY2lwYWwgZW5kcyBpbiAuYW1hem9uYXdzLmNvbSAob3JcXG4jIC5hbWF6b25hd3MuY29tLmNuIGluIHRoZSBDaGluYSBwYXJ0aXRpb24pLiBXaGV0aGVyIGEgd2VsbC1zaGFwZWQgbmFtZVxcbiMgZXhpc3RzIGlzIGxlZnQgdG8gdGhlIHNlcnZpY2UuXFxuX3BmX2l0c3BfdHJ1c3QobmFtZSkgOj0gZCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXNzdW1lUm9sZVBvbGljeURvY3VtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QoZClcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IFt2XSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG5fcGZfaXRzcF9vayhzcCkgaWYgZW5kc3dpdGgoc3AsIFxcXCIuYW1hem9uYXdzLmNvbVxcXCIpXFxuXFxuX3BmX2l0c3Bfb2soc3ApIGlmIGVuZHN3aXRoKHNwLCBcXFwiLmFtYXpvbmF3cy5jb20uY25cXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlByaW5jaXBhbC5TZXJ2aWNlXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJTZXJ2aWNlIHByaW5jaXBhbCAnJXMnIGlzIG5vdCBhbiBhbWF6b25hd3MuY29tIGRvbWFpbjsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggJ0ludmFsaWQgcHJpbmNpcGFsIGluIHBvbGljeTogXFxcXFxcXCJTRVJWSUNFXFxcXFxcXCI6XFxcXFxcXCIlc1xcXFxcXFwiJ1xcXCIsIFtzcCwgc3BdKSxcXG5cXHRcXFwiVXNlIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lLCBlLmcuIGxhbWJkYS5hbWF6b25hd3MuY29tXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19wcmluY2lwYWwuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRkIDo9IF9wZl9pdHNwX3RydXN0KG5hbWUpXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2l0c3Bfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRwIDo9IG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChwKVxcblxcdHNvbWUgc3AgaW4gX3BmX2l0c3BfdmFscyhvYmplY3QuZ2V0KHAsIFxcXCJTZXJ2aWNlXFxcIiwgW10pKVxcblxcdGlzX3N0cmluZyhzcClcXG5cXHRub3QgX3BmX2l0c3Bfb2soc3ApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTMy1iYXNlZCBDb2RlIG5lZWRzIGJvdGggUzNCdWNrZXQgYW5kIFMzS2V5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEhhbGYgYW4gUzMgcmVmZXJlbmNlIGNhbm5vdCBiZSBmZXRjaGVkLiBPbmx5IGp1ZGdlZCB3aGVuIG5laXRoZXIgWmlwRmlsZVxcbiMgbm9yIEltYWdlVXJpIGlzIHByZXNlbnQgKHRob3NlIHNoYXBlcyBiZWxvbmcgdG8gdGhlIGV4Y2x1c2l2ZSBydWxlKS5cXG5fcGZfbGNzcF9jb2RlKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvZGVcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxuX3BmX2xjc3BfaGFzKGMsIGspIGlmIG9iamVjdC5nZXQoYywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0tleVxcXCIsIFxcXCJTM0J1Y2tldFxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzQnVja2V0XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0tleVxcXCIpXFxufVxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0J1Y2tldFxcXCIsIFxcXCJTM0tleVxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzS2V5XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0J1Y2tldFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db2RlLiVzXFxcIiwgW21pc3NpbmdbMF1dKSxcXG5cXHRzcHJpbnRmKFxcXCJDb2RlIGhhcyAlcyBidXQgbm8gJXM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIEJ1Y2tldCBhbmQgS2V5IGFyZSByZXF1aXJlZCBmb3IgdXBsb2FkaW5nIHdpdGggUzMgcGFyYW1ldGVycy5cXFxcXFxcIlxcXCIsIFttaXNzaW5nWzFdLCBtaXNzaW5nWzBdXSksXFxuXFx0XFxcIlNldCBib3RoIFMzQnVja2V0IGFuZCBTM0tleVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGNzcF9jb2RlKG5hbWUpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiWmlwRmlsZVxcXCIpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiSW1hZ2VVcmlcXFwiKVxcblxcdG1pc3NpbmcgOj0gX3BmX2xjc3BfaGFsZihjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1jb2RlLXppcGZpbGUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBaaXBGaWxlIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIENvZGUgcGFyYW1ldGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEtleSBwcmVzZW5jZSBpbiB0aGUgQ29kZSBvYmplY3QgaXMgdGhlIHZpb2xhdGlvbjsgY2hlY2tlZCBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfbGN6eF9vdGhlciA6PSB7XFxcIlMzQnVja2V0XFxcIiwgXFxcIlMzS2V5XFxcIiwgXFxcIlMzT2JqZWN0VmVyc2lvblxcXCIsIFxcXCJJbWFnZVVyaVxcXCJ9XFxuXFxuX3BmX2xjenhfY29kZShuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb2RlXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtemlwZmlsZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQ29kZS4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiQ29kZSBzZXRzIFppcEZpbGUgdG9nZXRoZXIgd2l0aCAlczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUGxlYXNlIGRvIG5vdCBwcm92aWRlIG90aGVyIEZ1bmN0aW9uQ29kZSBwYXJhbWV0ZXJzIHdoZW4gcHJvdmlkaW5nIGEgWmlwRmlsZS5cXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0XFxcIktlZXAgdGhlIGlubGluZSBaaXBGaWxlIGFsb25lLCBvciBzd2l0Y2ggZW50aXJlbHkgdG8gdGhlIFMzL2ltYWdlIHJlZmVyZW5jZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGN6eF9jb2RlKG5hbWUpXFxuXFx0b2JqZWN0LmdldChjLCBcXFwiWmlwRmlsZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4gX3BmX2xjenhfb3RoZXJcXG5cXHRvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZGxxLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgZGVhZCBsZXR0ZXIgdGFyZ2V0IG11c3Qgc2l0IGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1kbHEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGVhZCBsZXR0ZXIgdGFyZ2V0IHJlZ2lvbiAnJXMnIGlzIG5vdCB0aGUgZGVwbG95IHJlZ2lvbiAnJXMnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHJlc291cmNlIHNwZWNpZmllZCBieSB0aGUgVGFyZ2V0QXJuIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBMYW1iZGEgZnVuY3Rpb24gaXQncyBhc3NvY2lhdGVkIHdpdGguXFxcXFxcXCJcXFwiLCBbcGFydHNbM10sIHJlZ2lvbl0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGEgcXVldWUgb3IgdG9waWMgaW4gdGhlIHNhbWUgcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbM10gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWRscS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkIGxldHRlciB0YXJnZXQgbXVzdCBiZSBhbiBTUVMgcXVldWUgb3IgU05TIHRvcGljXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIHNlZ21lbnQgbGl2ZXMgaW5zaWRlIHRoZSBBUk4gc3RyaW5nLCBpbnZpc2libGUgdG8gYW55XFxuIyBzY2hlbWEgbGF5ZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZGxxLXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZWFkIGxldHRlciB0YXJnZXQgc2VydmljZSAnJXMnIGlzIG5vdCBzcXMgb3Igc25zOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHNlcnZpY2Ugc3BlY2lmaWVkIGJ5IHRoZSBUYXJnZXRBcm4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVhZCBsZXR0ZXIgY29uZmlndXJhdGlvbi5cXFxcXFxcIlxcXCIsIFtwYXJ0c1syXV0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGFuIFNRUyBxdWV1ZSBvciBTTlMgdG9waWMgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0bm90IHBhcnRzWzJdIGluIHtcXFwic3FzXFxcIiwgXFxcInNuc1xcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTW91bnRpbmcgRUZTIHJlcXVpcmVzIFZwY0NvbmZpZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNb3VudGluZyBFRlMgcmVxdWlyZXMgdGhlIGZ1bmN0aW9uIHRvIHJ1biBpbnNpZGUgYSBWUEMuIEtleSBwcmVzZW5jZSBpc1xcbiMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sZWZzdl9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZwY0NvbmZpZ1xcXCIsXFxuXFx0XFxcIkZpbGVTeXN0ZW1Db25maWdzIHdpdGhvdXQgVnBjQ29uZmlnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJGdW5jdGlvbiBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gZXhlY3V0ZSBpbiBhIFZQQyB0byByZWZlcmVuY2UgYWNjZXNzIHBvaW50IC4uLiBQbGVhc2UgdXBkYXRlIHRoZSBmdW5jdGlvbiBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3Vwcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBWcGNDb25maWcgd2l0aCBzdWJuZXRzIHRoYXQgaGF2ZSBFRlMgbW91bnQgdGFyZ2V0cyBpbiB0aGVpciBBWnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2xlZnN2X3Byb3BzKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpbGVTeXN0ZW1Db25maWdzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWcGNDb25maWdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVudi1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGxpbWl0ZWQgdG8gNDA5NiBieXRlcyBpbiB0b3RhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDjg6rjg4bjg6njg6vmloflrZfliJfjga7jgq3jg7wv5YCk44Gg44GR44KS5pWw44GI44KL77yI44OI44O844Kv44Oz44Gv44K544Kt44OD44OX77yJ44CC5ZCI6KiI44GM5pei44GrIDQwOTYg44KS6LaF44GI44GmXFxuIyDjgYTjgozjgbDjgIHlrp/pmpvjga7jg4fjg5fjg63jgqTjgafjgoLlv4XjgZrlpLHmlZfjgZnjgovvvIjlrp/jgrXjgqTjgrrjga/mjqjlrprku6XkuIrjgavjgZfjgYvjgarjgonjgarjgYTvvInjgIJcXG4jIE5PVEU6IOOBk+OBruOCqOODs+OCuOODs+OBriBSZWdvIOODkeODvOOCteOBr+WGheWMheihqOiomOWGheOBriAyIOWkieaVsCBzb21l77yIc29tZSBrLCB2IGluIHZhcnPvvInjgpJcXG4jIOWPl+OBkeS7mOOBkeOBquOBhOOBn+OCgeOAgW9iamVjdC5rZXlzIOe1jOeUseOBp+abuOOBj+OAglxcbl9wZl9sZW52X3NpemUodmFycykgOj0gc3VtKFtzIHxcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmtleXModmFycylcXG5cXHRpc19zdHJpbmcodmFyc1trXSlcXG5cXHRzIDo9IGNvdW50KGspICsgY291bnQodmFyc1trXSlcXG5dKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVudi1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkVudmlyb25tZW50IHZhcmlhYmxlcyB0b3RhbCBhdCBsZWFzdCAlZCBieXRlcyAobGl0ZXJhbCBrZXlzIGFuZCB2YWx1ZXMpLCBidXQgTGFtYmRhIGxpbWl0cyB0aGUgZW52aXJvbm1lbnQgdG8gNDA5NiBieXRlczsgQ3JlYXRlRnVuY3Rpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG90YWxdKSxcXG5cXHRcXFwiTW92ZSBsYXJnZSB2YWx1ZXMgdG8gU1NNIFBhcmFtZXRlciBTdG9yZSwgU2VjcmV0cyBNYW5hZ2VyLCBvciBhIGJ1bmRsZWQgY29uZmlnIGZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9nZXR0aW5nc3RhcnRlZC1saW1pdHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0dmFycyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHZhcnMpXFxuXFx0dG90YWwgOj0gX3BmX2xlbnZfc2l6ZSh2YXJzKVxcblxcdHRvdGFsID4gNDA5Nlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTUVMgYmF0Y2ggc2l6ZXMgb3ZlciAxMCBuZWVkIGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTUVMtb25seSBjb3VwbGluZzogYmlnIGJhdGNoZXMgbXVzdCB3YWl0IGZvciBhIHdpbmRvdy4gS2luZXNpcyBhbmRcXG4jIER5bmFtb0RCIHNvdXJjZXMgdGFrZSBsYXJnZSBiYXRjaGVzIHdpdGhvdXQgb25lLCBoZW5jZSB0aGUgU1FTIGd1YXJkLlxcbl9wZl9sYnN3X2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGJzd19pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2xic3dfbm9fd2luZG93KG5hbWUpIGlmIHtcXG5cXHR0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiKSkgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmF0Y2hTaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYXRjaFNpemUgJXYgd2l0aG91dCBhIGJhdGNoaW5nIHdpbmRvdzsgdGhlIG1hcHBpbmcgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IE1heGltdW0gYmF0Y2ggd2luZG93IGluIHNlY29uZHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBpZiBtYXhpbXVtIGJhdGNoIHNpemUgaXMgZ3JlYXRlciB0aGFuIDEwXFxcXFxcXCJcXFwiLCBbYl0pLFxcblxcdFxcXCJTZXQgTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzICgxLTMwMCksIG9yIGtlZXAgQmF0Y2hTaXplIGF0IDEwIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGJzd19pc19zcXMobmFtZSlcXG5cXHRiIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhdGNoU2l6ZVxcXCIpKVxcblxcdGIgPiAxMFxcblxcdF9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyBxdWV1ZXMgcmVqZWN0IGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGSUZPIG9yZGVyaW5nIGZvcmJpZHMgaG9sZGluZyBhIGJhdGNoIG9wZW4uIEZJRk8tbmVzcyBjb21lcyBmcm9tIHRoZVxcbiMgcXVldWUgc2libGluZydzIEZpZm9RdWV1ZSBmbGFnIG9yIHRoZSAuZmlmbyBhcm4gc3VmZml4Llxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdHEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpXFxuXFx0cSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpKSA9PSB0cnVlXFxufVxcblxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgoYXJuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsXFxuXFx0XFxcIkJhdGNoaW5nIHdpbmRvdyBvbiBhIEZJRk8gcXVldWUgc291cmNlOyB0aGUgbWFwcGluZyBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogQmF0Y2hpbmcgd2luZG93IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEZJRk8gcXVldWVzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kcywgb3IgdXNlIGEgc3RhbmRhcmQgcXVldWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGZid19pc19maWZvKG5hbWUpXFxuXFx0dG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIikpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tc3FzLXN0YXJ0aW5nLXBvc2l0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNRUyBldmVudCBzb3VyY2VzIHJlamVjdCBTdGFydGluZ1Bvc2l0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTdGFydGluZ1Bvc2l0aW9uIGJlbG9uZ3MgdG8gc3RyZWFtIHNvdXJjZXM7IHF1ZXVlcyBoYXZlIG5vIG9mZnNldHMuXFxuIyBEZXRlY3RlZCB2aWEgYW4gaW4tdGVtcGxhdGUgcXVldWUgc2libGluZyBvciB0aGUgc3FzIGFybiBzZWdtZW50Llxcbl9wZl9sZXNwX2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGVzcF9pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sZXNwX3NldChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlN0YXJ0aW5nUG9zaXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1zcXMtc3RhcnRpbmctcG9zaXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN0YXJ0aW5nUG9zaXRpb25cXFwiLFxcblxcdFxcXCJTdGFydGluZ1Bvc2l0aW9uIG9uIGFuIFNRUyBldmVudCBzb3VyY2U7IHRoZSBtYXBwaW5nIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBTdGFydGluZ1Bvc2l0aW9uIGlzIG5vdCB2YWxpZCBmb3IgU1FTIGV2ZW50IHNvdXJjZXMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIFN0YXJ0aW5nUG9zaXRpb24gKGl0IG9ubHkgYXBwbGllcyB0byBLaW5lc2lzL0R5bmFtb0RCL0thZmthIHNvdXJjZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWV2ZW50c291cmNlbWFwcGluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1xcXCIpXFxuXFx0X3BmX2xlc3BfaXNfc3FzKG5hbWUpXFxuXFx0X3BmX2xlc3Bfc2V0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLW1lbW9yeS1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWVtb3J5U2l6ZSB0b3BzIG91dCBhdCAxMDI0MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBoYXMgdGhlIDEyOCBmbG9vciBidXQgaXMgbWlzc2luZyB0aGUgMTAyNDAgY2FwXFxuIyAoZW5naW5lIGNsZWFuIG9uIDIwMDAwLCBGMzAzNCBvbiA2NCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtbWVtb3J5LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5U2l6ZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWVtb3J5U2l6ZSAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIidNZW1vcnlTaXplJyB2YWx1ZSBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDI0MFxcXFxcXFwiXFxcIiwgW21dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMTAyNDAgTUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0bSA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZW1vcnlTaXplXFxcIikpXFxuXFx0bSA+IDEwMjQwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLXRpbWVvdXQtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQgdG9wcyBvdXQgYXQgOTAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgaGFzIHRoZSAxIGZsb29yIGJ1dCBpcyBtaXNzaW5nIHRoZSA5MDAgY2FwIChlbmdpbmVcXG4jIGNsZWFuIG9uIDkwMSwgRjMwMzQgb24gMCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtdGltZW91dC1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRpbWVvdXQgJXYgaXMgb3ZlciB0aGUgMTUtbWludXRlIGNhcDsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVmFsdWUgJyV2JyBhdCAndGltZW91dCcgZmFpbGVkIHRvIHNhdGlzZnkgY29uc3RyYWludDogTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTAwXFxcXFxcXCJcXFwiLCBbdCwgdF0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCA5MDAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiKSlcXG5cXHR0ID4gOTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpbHRlciBwYXR0ZXJuIHN0YXJ0aW5nIHdpdGggJ1snIG11c3QgZW5kIHdpdGggJ10nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ2ZwYl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL0ZpbHRlckFuZFBhdHRlcm5TeW50YXguaHRtbFxcXCJcXG5cXG5fcGZfbGdmcGJfbXNnKGtpbmQpIDo9IHNwcmludGYoXFxcIlRoZSAlcyBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgYnV0IGRvZXMgbm90IGVuZCB3aXRoICddJzsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSWYgYSBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgaXQgbXVzdCBlbmQgd2l0aCAnXSdcXFxcXFxcIlxcXCIsIFtraW5kXSlcXG5cXG5fcGZfbGdmcGJfZml4IDo9IFxcXCJDbG9zZSB0aGUgYnJhY2tldCDigJQgYSBzcGFjZS1kZWxpbWl0ZWQgcGF0dGVybiBpcyBbZmllbGQxLCBmaWVsZDIsIC4uLl1cXFwiXFxuXFxuIyBUaGUgc2FtZSBwYXJzZXIgcnVucyBmb3IgbWV0cmljIGZpbHRlcnMgYW5kIHN1YnNjcmlwdGlvbiBmaWx0ZXJzLCBhbmQgaXRcXG4jIHJ1bnMgYmVmb3JlIGFueSBkZXN0aW5hdGlvbiB2YWxpZGF0aW9uIChiZW5jaCBjMDEvYzA2KS4gT25seSB0aGlzXFxuIyBzdGFydC9lbmQgcGFpcmluZyBpcyBjaGVja2VkIGhlcmU7IGEgZnVsbCBwYXR0ZXJuIHBhcnNlciBpcyBvdXQgb2Ygc2NvcGUuXFxuX3BmX2xnZnBiX3VuYmFsYW5jZWQocCkgaWYge1xcblxcdHQgOj0gdHJpbV9zcGFjZShwKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcIltcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiXVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJtZXRyaWNcXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJzdWJzY3JpcHRpb25cXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZWZhdWx0VmFsdWUgaXMgZW1pdHRlZCB3aGVuIGEgbG9nIGxpbmUgZG9lcyBub3QgbWF0Y2gsIGJ1dCBhIGRpbWVuc2lvblxcbiMgdmFsdWUgY2FuIG9ubHkgY29tZSBmcm9tIGEgbWF0Y2gg4oCUIHRoZSBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbWJpbmF0aW9uLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnMuJWQuRGVmYXVsdFZhbHVlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbiBzZXRzIGJvdGggRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJbnZhbGlkIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbjogZGltZW5zaW9ucyBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHByb3BlcnRpZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgRGVmYXVsdFZhbHVlIHdoZW4gdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBEaW1lbnNpb25zLCBvciBkcm9wIHRoZSBEaW1lbnNpb25zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sb2dzLW1ldHJpY2ZpbHRlci1tZXRyaWN0cmFuc2Zvcm1hdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEZWZhdWx0VmFsdWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0ZGltcyA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEaW1lbnNpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShkaW1zKVxcblxcdGNvdW50KGRpbXMpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIGRlc3RpbmF0aW9uIG5lZWRzIFJvbGVBcm5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnc2tyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvU3Vic2NyaXB0aW9uRmlsdGVycy5odG1sXFxcIlxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIGlzIHByb3ZhYmx5IEtpbmVzaXMgdHdvIHdheXM6IGEgbGl0ZXJhbFxcbiMgYXJuOjxwYXJ0aXRpb24+OmtpbmVzaXM6IHN0cmluZywgb3IgYSBSZWYvR2V0QXR0IHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG9cXG4jIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIEFXUzo6S2luZXNpczo6U3RyZWFtLiBTY29wZWQgdG8gS2luZXNpcyDigJRcXG4jIHRoZSBiZW5jaCBlcnJvciBuYW1lcyBcXFwidmVuZG9yIGtpbmVzaXNcXFwiOyBvdGhlciB2ZW5kb3JzIHdlcmUgbm90IG1lYXN1cmVkLlxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0cGFydHMgOj0gc3BsaXQoZCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAzXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG59XFxuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRkIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXM6OlN0cmVhbVxcXCIpXFxufVxcblxcbiMgVHJ1ZSBhYnNlbmNlIG9mIFJvbGVBcm4gbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVBcm5cXFwiLFxcblxcdFxcXCJUaGUgc3Vic2NyaXB0aW9uIGZpbHRlciB0YXJnZXRzIGEgS2luZXNpcyBzdHJlYW0gYnV0IHNldHMgbm8gUm9sZUFybjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiZGVzdGluYXRpb25Bcm4gZm9yIHZlbmRvciBraW5lc2lzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgcm9sZUFyblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUm9sZUFybiBmb3IgYSByb2xlIHRoYXQgbG9ncy5hbWF6b25hd3MuY29tIGNhbiBhc3N1bWUgd2l0aCBraW5lc2lzOlB1dFJlY29yZCBvbiB0aGUgc3RyZWFtXFxcIixcXG5cXHRfcGZfbGdza3JfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0X3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKVxcblxcdF9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdHJhY2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQmFja3RyYWNrIG9ubHkgd29ya3Mgb24gYXVyb3JhLW15c3FsLCB3aXRoIGEgd2luZG93IG9mIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhTXlTUUwuTWFuYWdpbmcuQmFja3RyYWNrLmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3RyYWNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYWNrdHJhY2tXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t0cmFjayBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhdXJvcmEtbXlzcWwgKFxcXFxcXFwiQmFja3RyYWNrIGlzIG5vdCBlbmFibGVkIGZvciB0aGUgJXMgZW5naW5lLlxcXFxcXFwiKVxcXCIsIFtlbmddKSxcXG5cXHRcXFwiUmVtb3ZlIEJhY2t0cmFja1dpbmRvdywgb3IgdXNlIHRoZSBhdXJvcmEtbXlzcWwgZW5naW5lXFxcIixcXG5cXHRfcGZfcmRzYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAwXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRpc19zdHJpbmcoZW5nKVxcblxcdGVuZyAhPSBcXFwiYXVyb3JhLW15c3FsXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdHJhY2tcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQmFja3RyYWNrV2luZG93ICV2IGlzIG91dHNpZGUgMC0yNTkyMDAgc2Vjb25kcyAoNzIgaG91cnMpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcXFwiLFxcblxcdF9wZl9yZHNidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIikgPT0gXFxcImF1cm9yYS1teXNxbFxcXCJcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAyNTkyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgbXVzdCBiZSBhdCBtb3N0IDM1IGRheXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmFja3VwUmV0ZW50aW9uUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgJXYgZXhjZWVkcyB0aGUgbWF4aW11bTsgUkRTIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlJldGVudGlvbiBwZXJpb2QgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM1LlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGEgcmV0ZW50aW9uIHBlcmlvZCBvZiAzNSBkYXlzIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t1cFJldGVudGlvblBlcmlvZFxcXCIpKVxcblxcdG4gPiAzNVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IG11c3QgYmUgYXQgbGVhc3QgMzAgbWludXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFxcXCJISDpNTVxcXCIgLT4gbWludXRlcyBvZiBkYXk7IHVuZGVmaW5lZCBmb3IgYW55dGhpbmcgZWxzZS4gRGlnaXRzIGdvXFxuIyB0aHJvdWdoIGEgbG9va3VwIHRhYmxlIGJlY2F1c2UgdG9fbnVtYmVyIHJlamVjdHMgbGVhZGluZyB6ZXJvc1xcbiMgKHRvX251bWJlcihcXFwiMDNcXFwiKSBpcyB1bmRlZmluZWQgaW4gdGhlIGVuZ2luZSdzIFJlZ28gYnVpbGQpLlxcbl9wZl9yZHN3ZF9kaWdpdCA6PSB7XFxcIjBcXFwiOiAwLCBcXFwiMVxcXCI6IDEsIFxcXCIyXFxcIjogMiwgXFxcIjNcXFwiOiAzLCBcXFwiNFxcXCI6IDQsIFxcXCI1XFxcIjogNSwgXFxcIjZcXFwiOiA2LCBcXFwiN1xcXCI6IDcsIFxcXCI4XFxcIjogOCwgXFxcIjlcXFwiOiA5fVxcblxcbl9wZl9yZHN3ZF9taW4odCkgOj0gbSBpZiB7XFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0cmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB0KVxcblxcdGggOj0gKF9wZl9yZHN3ZF9kaWdpdFtzdWJzdHJpbmcodCwgMCwgMSldICogMTApICsgX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAxLCAxKV1cXG5cXHRtaSA6PSAoX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAzLCAxKV0gKiAxMCkgKyBfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDQsIDEpXVxcblxcdG0gOj0gKGggKiA2MCkgKyBtaVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyAnJXMnIGlzIG9ubHkgJXYgbWludXRlczsgUkRTIHJlcXVpcmVzIGF0IGxlYXN0IDMwIChcXFxcXFxcIkJhY2t1cCB3aW5kb3cgbXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzLlxcXFxcXFwiKVxcXCIsIFt3LCBkXSksXFxuXFx0XFxcIldpZGVuIHRoZSB3aW5kb3cgdG8gMzAgbWludXRlcyBvciBtb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0cGFydHMgOj0gc3BsaXQodywgXFxcIi1cXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0cyA6PSBfcGZfcmRzd2RfbWluKHBhcnRzWzBdKVxcblxcdGUgOj0gX3BmX3Jkc3dkX21pbihwYXJ0c1sxXSlcXG5cXHRkIDo9ICgoZSAtIHMpICsgMTQ0MCkgJSAxNDQwXFxuXFx0ZCA8IDMwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyBtdXN0IGJlIGhoMjQ6bWktaGgyNDptaVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmZXJyZWRCYWNrdXBXaW5kb3cgJyVzJyBpcyBub3QgaGgyNDptaS1oaDI0Om1pICgyNEggY2xvY2sgVVRDKTsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLCBbd10pLFxcblxcdFxcXCJVc2UgdGhlIGhoMjQ6bWktaGgyNDptaSBmb3JtLCBlLmcuIDAzOjAwLTA0OjAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0tKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtZGJuYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJwb3N0Z3JlcyBEQk5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbGV0dGVyLXN0YXJ0IGhhbGYgb2YgdGhlIHNlcnZpY2UgbWVzc2FnZSBpcyBjbGFpbWVkOiB0aGVcXG4jIFxcXCJvbmx5IGFscGhhbnVtZXJpY1xcXCIgaGFsZiBpcyBtZWFzdXJhYmx5IHdyb25nIChiZW5jaF9kYiBkZXBsb3lzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kYm5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRCTmFtZSAnJXMnIGRvZXMgbm90IGJlZ2luIHdpdGggYSBsZXR0ZXIgKFxcXFxcXFwiREJOYW1lIG11c3QgYmVnaW4gd2l0aCBhIGxldHRlclxcXFxcXFwiKTsgdGhlIENyZWF0ZURCSW5zdGFuY2UgY2FsbCBmYWlsc1xcXCIsIFtkbl0pLFxcblxcdFxcXCJTdGFydCB0aGUgZGF0YWJhc2UgbmFtZSB3aXRoIGEgbGV0dGVyXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0ZG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aXWAsIGRuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUkRTIGdyb3VwIGRlc2NyaXB0aW9ucyBtdXN0IGJlIHByaW50YWJsZSBBU0NJSVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUGFyYW1ldGVyR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cERlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBEZXNjcmlwdGlvblxcXCJcXG59XFxuXFxuX3BmX3Jkc2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCB2XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJQYXJhbWV0ZXJHcm91cFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiRGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogUkRTIHRyZWF0cyBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlciBhcyBhIG5vbi1wcmludGFibGUgY29udHJvbCBjaGFyYWN0ZXJcXFwiLCBbdl0pLFxcblxcdFxcXCJXcml0ZSB0aGUgZGVzY3JpcHRpb24gaW4gcHJpbnRhYmxlIEFTQ0lJXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgdl0gaW4gX3BmX3Jkc2Rlc2NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImdwMyBiZWxvdyA0MDAgR2lCIGNhbm5vdCB0YWtlIGN1c3RvbSBJb3BzIG9yIFN0b3JhZ2VUaHJvdWdocHV0IChwb3N0Z3Jlcy9teXNxbClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc2dwM19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9yZHNncDNfY3VzdG9tKG5hbWUpIGlmIF9wZl9yZHNncDNfaGFzKG5hbWUsIFxcXCJJb3BzXFxcIilcXG5cXG5fcGZfcmRzZ3AzX2N1c3RvbShuYW1lKSBpZiBfcGZfcmRzZ3AzX2hhcyhuYW1lLCBcXFwiU3RvcmFnZVRocm91Z2hwdXRcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJncDMgd2l0aCAldiBHaUIgY2Fubm90IHRha2UgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQgYmVsb3cgNDAwIEdpQiBmb3IgZW5naW5lICVzIChcXFxcXFxcIllvdSBjYW4ndCBzcGVjaWZ5IElPUFMgb3Igc3RvcmFnZSB0aHJvdWdocHV0IC4uLiBsZXNzIHRoYW4gNDAwLlxcXFxcXFwiKVxcXCIsIFtzLCBlbmddKSxcXG5cXHRcXFwiRHJvcCB0aGUgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQsIG9yIGFsbG9jYXRlIGF0IGxlYXN0IDQwMCBHaUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRlbmcgaW4ge1xcXCJwb3N0Z3Jlc1xcXCIsIFxcXCJteXNxbFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA8IDQwMFxcblxcdF9wZl9yZHNncDNfY3VzdG9tKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIGlvMSBJb3BzIG1heSBub3QgZXhjZWVkIDUwIHBlciBHaUIgb2Ygc3RvcmFnZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIGJlbmNoZWQgZW5naW5lL3R5cGUgcGFpcjsgdGhlIGhpc3RvcmljYWwgNjQwMDAgSU9QUyBjYXAgaXNcXG4jIGdvbmUgKDgwMDAwIGRlcGxveWVkIGNsZWFuIGF0IHJhdGlvIDQwIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGlzICV2IHBlciBHaUIgZm9yICV2IEdpQjsgcG9zdGdyZXMgaW8xIGFsbG93cyBhdCBtb3N0IDUwIChcXFxcXFxcIkludmFsaWQgaW9wcyB0byBzdG9yYWdlIChHaUIpIHJhdGlvXFxcXFxcXCIpXFxcIiwgW24sIG4gLyBzLCBzXSksXFxuXFx0XFxcIktlZXAgSW9wcyBhdCBvciBiZWxvdyA1MCB4IEFsbG9jYXRlZFN0b3JhZ2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJpbzFcXFwiXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA+IDBcXG5cXHRuID4gcyAqIDUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiaW8xIGFuZCBpbzIgc3RvcmFnZSByZXF1aXJlIHRoZSBJb3BzIHByb3BlcnR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0b3JhZ2VUeXBlICVzIHJlcXVpcmVzIElvcHMgKFxcXFxcXFwiVGhlIHN0b3JhZ2UgdHlwZSAlcyByZXF1aXJlcyBpb3BzIHRvIGJlIHNwZWNpZmllZC5cXFxcXFxcIilcXFwiLCBbc3QsIHN0XSksXFxuXFx0XFxcIlNldCBJb3BzIGFsb25nc2lkZSB0aGUgcHJvdmlzaW9uZWQtSU9QUyBzdG9yYWdlIHR5cGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRzdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIilcXG5cXHRzdCBpbiB7XFxcImlvMVxcXCIsIFxcXCJpbzJcXFwifVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJb3BzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wYXNzd29yZC12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYXN0ZXJVc2VyUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgd2l0aG91dCAnLycsICdAJywgJ1xcXFxcXFwiJyBvciBzcGFjZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzcHdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCJcXG5cXG5fcGZfcmRzcHdfdHlwZXMgOj0ge1xcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIsIFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIn1cXG5cXG5fcGZfcmRzcHdfZm9yYmlkZGVuIDo9IHtcXFwiL1xcXCIsIFxcXCJAXFxcIiwgXFxcIlxcXFxcXFwiXFxcIiwgXFxcIiBcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdFxcXCJNYXN0ZXJVc2VyUGFzc3dvcmQgaXMgc2hvcnRlciB0aGFuIDggY2hhcmFjdGVyczsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLFxcblxcdFxcXCJVc2UgOCsgY2hhcmFjdGVycywgb3IgYSBTZWNyZXRzIE1hbmFnZXIgcmVmZXJlbmNlXFxcIixcXG5cXHRfcGZfcmRzcHdfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiBfcGZfcmRzcHdfdHlwZXNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0cHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiKVxcblxcdGlzX3N0cmluZyhwdylcXG5cXHRjb3VudChwdykgPCA4XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1hc3RlclVzZXJQYXNzd29yZCBjb250YWlucyAnJXMnOyBSRFMgZm9yYmlkcyAnLycsICdAJywgZG91YmxlIHF1b3RlcyBhbmQgc3BhY2VzXFxcIiwgW2NoXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgZm9yYmlkZGVuIGNoYXJhY3Rlciwgb3IgdXNlIGEgU2VjcmV0cyBNYW5hZ2VyIHJlZmVyZW5jZVxcXCIsXFxuXFx0X3BmX3Jkc3B3X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4gX3BmX3Jkc3B3X3R5cGVzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHB3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFzdGVyVXNlclBhc3N3b3JkXFxcIilcXG5cXHRpc19zdHJpbmcocHcpXFxuXFx0c29tZSBjaCBpbiBfcGZfcmRzcHdfZm9yYmlkZGVuXFxuXFx0Y29udGFpbnMocHcsIGNoKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkYXRhYmFzZSBwb3J0IG11c3QgYmUgd2l0aGluIDExNTAtNjU1MzVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPCAxMTUwXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPiA2NTUzNVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvcnQgJXYgaXMgb3V0c2lkZSAxMTUwLTY1NTM1IChcXFxcXFxcIkludmFsaWQgZW5kcG9pbnQgcG9ydCAldi4gVmFsaWQgcmFuZ2UgaXM6IDExNTAtNjU1MzVcXFxcXFxcIilcXFwiLCBbbiwgbl0pLFxcblxcdFxcXCJQaWNrIGEgcG9ydCBiZXR3ZWVuIDExNTAgYW5kIDY1NTM1XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb3J0XFxcIikpXFxuXFx0X3BmX3Jkc3BvcnRfb3V0KG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VydmVybGVzcyB2MiBNaW5DYXBhY2l0eSBtdXN0IG5vdCBleGNlZWQgTWF4Q2FwYWNpdHksIGFuZCBNYXhDYXBhY2l0eSBpcyBhdCBtb3N0IDI1NlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNzdjJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MtdjIuc2V0dGluZy1jYXBhY2l0eS5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5DYXBhY2l0eSAldiBleGNlZWRzIE1heENhcGFjaXR5ICV2IChcXFxcXFxcIm1pbmltdW0gY2FwYWNpdHkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4aW11bSBjYXBhY2l0eVxcXFxcXFwiKVxcXCIsIFttbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5DYXBhY2l0eSA8PSBNYXhDYXBhY2l0eVxcXCIsXFxuXFx0X3BmX3Jkc3N2Ml91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWF4Q2FwYWNpdHlcXFwiKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1heENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNYXhDYXBhY2l0eSAldiBpcyBhYm92ZSAyNTYgQUNVcyAoXFxcXFxcXCJUaGUgdmFsaWQgc2NhbGluZyByYW5nZSBmb3IgdGhpcyBjbHVzdGVyIGlzIDAuMCB0byAyNTYuMC5cXFxcXFxcIilcXFwiLCBbbXhdKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU2IEFDVXNcXFwiLFxcblxcdF9wZl9yZHNzdjJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbi5NYXhDYXBhY2l0eVxcXCIpKVxcblxcdG14ID4gMjU2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXN1Ym5ldC1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRCIHN1Ym5ldCBncm91cCBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHNwYWNlcywgZG90LCB1bmRlcnNjb3JlIGFuZCBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc3VibmV0LWdyb3VwLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEQlN1Ym5ldEdyb3VwTmFtZSAnJXMnIGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJJbnZhbGlkIHN1Ym5ldCBncm91cCBuYW1lXFxcXFxcXCI6IFJEUyBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgc3BhY2VzLCBkb3QsIHVuZGVyc2NvcmUgYW5kIGh5cGhlblxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgc3VibmV0IGdyb3VwIHVzaW5nIFthLXpBLVowLTkgLl8tXSBvbmx5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJTdWJuZXRHcm91cFxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fLV17MSwyNTV9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXdpbmRvdy1vdmVybGFwXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IGFuZCB0aGUgbWFpbnRlbmFuY2Ugd2luZG93IG11c3Qgbm90IG92ZXJsYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBcXFwiSEg6TU1cXFwiIC0+IG1pbnV0ZXMgb2YgZGF5OyB1bmRlZmluZWQgZm9yIGFueXRoaW5nIGVsc2UuIERpZ2l0cyBnb1xcbiMgdGhyb3VnaCBhIGxvb2t1cCB0YWJsZSBiZWNhdXNlIHRvX251bWJlciByZWplY3RzIGxlYWRpbmcgemVyb3NcXG4jICh0b19udW1iZXIoXFxcIjAzXFxcIikgaXMgdW5kZWZpbmVkIGluIHRoZSBlbmdpbmUncyBSZWdvIGJ1aWxkKS5cXG5fcGZfcmRzd29fZGlnaXQgOj0ge1xcXCIwXFxcIjogMCwgXFxcIjFcXFwiOiAxLCBcXFwiMlxcXCI6IDIsIFxcXCIzXFxcIjogMywgXFxcIjRcXFwiOiA0LCBcXFwiNVxcXCI6IDUsIFxcXCI2XFxcIjogNiwgXFxcIjdcXFwiOiA3LCBcXFwiOFxcXCI6IDgsIFxcXCI5XFxcIjogOX1cXG5cXG5fcGZfcmRzd29fbWluKHQpIDo9IG0gaWYge1xcblxcdGlzX3N0cmluZyh0KVxcblxcdHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdClcXG5cXHRoIDo9IChfcGZfcmRzd29fZGlnaXRbc3Vic3RyaW5nKHQsIDAsIDEpXSAqIDEwKSArIF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMSwgMSldXFxuXFx0bWkgOj0gKF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMywgMSldICogMTApICsgX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCA0LCAxKV1cXG5cXHRtIDo9IChoICogNjApICsgbWlcXG59XFxuXFxuIyBUaGUgYmFja3VwIHdpbmRvdyByZWN1cnMgZGFpbHksIHNvIGEgc2FtZS1kYXkgbWFpbnRlbmFuY2Ugd2luZG93XFxuIyBvdmVybGFwcyB3aGVuZXZlciB0aGUgdGltZS1vZi1kYXkgaW50ZXJ2YWxzIGludGVyc2VjdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy13aW5kb3ctb3ZlcmxhcFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXAgd2luZG93ICVzIG92ZXJsYXBzIG1haW50ZW5hbmNlIHdpbmRvdyAlczsgUkRTIHJlamVjdHMgdGhlIHBhaXIgKFxcXFxcXFwiVGhlIGJhY2t1cCB3aW5kb3cgYW5kIG1haW50ZW5hbmNlIHdpbmRvdyBtdXN0IG5vdCBvdmVybGFwLlxcXFxcXFwiKVxcXCIsIFtidywgbXddKSxcXG5cXHRcXFwiU2VwYXJhdGUgdGhlIHR3byB3aW5kb3dzIGluIHRpbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRidyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKGJ3KVxcblxcdGJwIDo9IHNwbGl0KGJ3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQoYnApID09IDJcXG5cXHRicyA6PSBfcGZfcmRzd29fbWluKGJwWzBdKVxcblxcdGJlIDo9IF9wZl9yZHN3b19taW4oYnBbMV0pXFxuXFx0YnMgPCBiZVxcblxcdG13IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dcXFwiKVxcblxcdGlzX3N0cmluZyhtdylcXG5cXHRtcCA6PSBzcGxpdChsb3dlcihtdyksIFxcXCItXFxcIilcXG5cXHRjb3VudChtcCkgPT0gMlxcblxcdG0xIDo9IHNwbGl0KG1wWzBdLCBcXFwiOlxcXCIpXFxuXFx0bTIgOj0gc3BsaXQobXBbMV0sIFxcXCI6XFxcIilcXG5cXHRjb3VudChtMSkgPT0gM1xcblxcdGNvdW50KG0yKSA9PSAzXFxuXFx0bTFbMF0gPT0gbTJbMF1cXG5cXHRtcyA6PSBfcGZfcmRzd29fbWluKHNwcmludGYoXFxcIiVzOiVzXFxcIiwgW20xWzFdLCBtMVsyXV0pKVxcblxcdG1lIDo9IF9wZl9yZHN3b19taW4oc3ByaW50ZihcXFwiJXM6JXNcXFwiLCBbbTJbMV0sIG0yWzJdXSkpXFxuXFx0bXMgPCBtZVxcblxcdGJzIDwgbWVcXG5cXHRtcyA8IGJlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ2xvdWRGcm9udCBhbGlhcyB0YXJnZXQgbXVzdCB1c2UgaG9zdGVkIHpvbmUgWjJGRFROREFUQVFZVzJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBpcyBhbGlhc2VkIHRocm91Z2ggdGhlIHNpbmdsZSBnbG9iYWwgaG9zdGVkXFxuIyB6b25lIFoyRkRUTkRBVEFRWVcyLiBBbnkgb3RoZXIgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIChhbiBBTEIncyByZWdpb25hbFxcbiMgem9uZSBpZCBpcyB0aGUgY2xhc3NpYyBwYXN0ZSBlcnJvcikgZmFpbHMgYXQgZGVwbG95IHRpbWUgd2l0aCBcXFwidGhlIGFsaWFzXFxuIyB0YXJnZXQgbmFtZSBkb2VzIG5vdCBsaWUgd2l0aGluIHRoZSB0YXJnZXQgem9uZVxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgYWxpYXMgdGFyZ2V0cyBhIENsb3VkRnJvbnQgZG9tYWluLCBzbyBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgbXVzdCBiZSBaMkZEVE5EQVRBUVlXMiwgbm90ICclcydcXFwiLCBbemlkXSksXFxuXFx0XFxcIlNldCBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgdG8gWjJGRFROREFUQVFZVzIgKGluIHRoZSBDREssIHJvdXRlNTNfdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0IGRvZXMgdGhpcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvY2ZfcmVnaW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0ZG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuRE5TTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRucylcXG5cXHRlbmRzd2l0aCh0cmltX3N1ZmZpeChsb3dlcihkbnMpLCBcXFwiLlxcXCIpLCBcXFwiLmNsb3VkZnJvbnQubmV0XFxcIilcXG5cXHR6aWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6aWQpXFxuXFx0emlkICE9IFxcXCJaMkZEVE5EQVRBUVlXMlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19hcGV4X25vcm0obikgOj0gdHJpbV9zdWZmaXgobG93ZXIobiksIFxcXCIuXFxcIilcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAyMyBjYXRjaGVzIGFuIGFwZXggQ05BTUUgb25seSB3aGVuIHRoZSByZWNvcmQgY2FycmllcyBhXFxuIyBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lLiBDREsgTDIgYWx3YXlzIGxpbmtzIHJlY29yZHMgd2l0aFxcbiMgSG9zdGVkWm9uZUlkOiB7XFxcIlJlZlxcXCI6IDx6b25lPn0sIHdoaWNoIEUzMDIzIGRvZXMgbm90IHNlZSAobWVhc3VyZWQgMjAyNi0wOS0wMixcXG4jIGVuZ2luZSAxLjcuMC1iZXRhKS4gcmVzb2x2ZSgpIHR1cm5zIHN1Y2ggYSBSZWYgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCxcXG4jIHNvIHdoZW4gdGhhdCBJRCBuYW1lcyBhIEhvc3RlZFpvbmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUgd2UgY2FuIHJlYWQgaXRzXFxuIyBsaXRlcmFsIE5hbWUgYW5kIGRvIHRoZSBhcGV4IGNvbXBhcmlzb24gb3Vyc2VsdmVzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hcGV4LWNuYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXggKCclcycpOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiUlJTZXQgb2YgdHlwZSBDTkFNRSAuLi4gaXMgbm90IHBlcm1pdHRlZCBhdCBhcGV4XFxcXFxcXCJcXFwiLCBbcmVjTmFtZV0pLFxcblxcdFxcXCJVc2UgYW4gYWxpYXMgQS9BQUFBIHJlY29yZCBmb3IgdGhlIGFwZXggKEFsaWFzVGFyZ2V0KSwgb3IgbW92ZSB0aGUgQ05BTUUgdG8gYSBzdWJkb21haW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVzb3VyY2UtcmVjb3JkLXNldHMtY2hvb3NpbmctYWxpYXMtbm9uLWFsaWFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHpyZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6cmVmKVxcblxcdHpyZWYgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVxcXCIpXFxuXFx0em9uZU5hbWUgOj0gcmVzb2x2ZSh6cmVmLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem9uZU5hbWUpXFxuXFx0cmVjTmFtZSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhyZWNOYW1lKVxcblxcdF9wZl9yNTNfYXBleF9ub3JtKHJlY05hbWUpID09IF9wZl9yNTNfYXBleF9ub3JtKHpvbmVOYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgZXhwcmVzc2VzIHRoaXMgYXMgYSBvbmVPZiwgd2hpY2ggdGhlIHNlcnZlci1zaWRlXFxuIyBwcmUtZGVwbG95IHZhbGlkYXRpb24gZW5mb3JjZXMgKFxcXCIyIHN1YnNjaGVtYXMgbWF0Y2hlZCBpbnN0ZWFkIG9mIG9uZVxcXCIpIGJ1dFxcbiMgdGhlIGJ1bmRsZWQgZW5naW5lIGRvZXMgbm90IGV2YWx1YXRlIOKAlCBoZW5jZSB1cHN0cmVhbTogcGVuZGluZy1lbmdpbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiLFxcblxcdFxcXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlOyBDbG91ZEZvcm1hdGlvbiByZWplY3RzIHRoZSByZWNvcmQgc2V0IGJlZm9yZSBwcm92aXNpb25pbmdcXFwiLFxcblxcdFxcXCJLZWVwIGVpdGhlciB0aGUgQ29udGluZW50Q29kZSBvciB0aGUgQ291bnRyeUNvZGUgKGFkZCBTdWJkaXZpc2lvbkNvZGUgb25seSBuZXh0IHRvIENvdW50cnlDb2RlIFVTKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtcm91dGU1My1yZWNvcmRzZXQtZ2VvbG9jYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRnZW8gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KGdlbylcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb250aW5lbnRDb2RlXFxcIiwgbnVsbCkpXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ291bnRyeUNvZGVcXFwiLCBudWxsKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdFxcXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJNdWx0aXZhbHVlIGFuc3dlciBycnNldCBzaG91bGQgbm90IGJlIGFuIGFsaWFzIHJyc2V0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgcGxhaW4gbXVsdGl2YWx1ZSByZWNvcmRzIHdpdGggUmVzb3VyY2VSZWNvcmRzLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXIgYW5kIGtlZXAgdGhlIGFsaWFzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOUyByZWNvcmRzIHRha2Ugbm8gcm91dGluZyBwb2xpY3k7IENOQU1FIGNhbm5vdCBiZSBtdWx0aXZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdHlwb2xfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfdHlwb2xfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3R5cG9sX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuIyBPbmx5IGNvbWJpbmF0aW9ucyB0aGF0IGZhaWxlZCBvbiBhIHJlYWwgZGVwbG95IGFyZSBmbGFnZ2VkLiBTT0EvRFMgd2l0aCBhXFxuIyByb3V0aW5nIHBvbGljeSBhcmUgYWxzbyBkb2N1bWVudGVkIGFzIHVuc3VwcG9ydGVkIGJ1dCB3ZXJlIG5vdCBtZWFzdXJlZCwgc29cXG4jIHRoZXkgYXJlIGRlbGliZXJhdGVseSBsZWZ0IG91dCAoc2VlIHRoZSBkaXNjb3ZlcnkgaXNzdWUpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkFuIE5TIHJlY29yZCBjYW5ub3QgdXNlIGEgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgYSBzaW1wbGUgcmVjb3JkIHNldCBmb3IgTlMgcmVjb3JkcyAobm8gV2VpZ2h0L1JlZ2lvbi9GYWlsb3Zlci9HZW9Mb2NhdGlvbi9NdWx0aVZhbHVlQW5zd2VyL0NpZHJSb3V0aW5nQ29uZmlnKVxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTlNcXFwiXFxuXFx0X3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkEgQ05BTUUgcmVjb3JkIGNhbm5vdCB1c2UgdGhlIG11bHRpdmFsdWUgYW5zd2VyIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUG9pbnQgdGhlIG11bHRpdmFsdWUgcmVjb3JkcyBhdCBBL0FBQUEgKG9yIGFub3RoZXIgc3VwcG9ydGVkIHR5cGUpLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBuZWVkcyBBbGlhc1RhcmdldCBvciB0aGUgZnVsbCBUVEwrUmVzb3VyY2VSZWNvcmRzIHBhaXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M192YWxzcmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbiMgVGhlIHNlcnZpY2UgZXhwZWN0cyBcXFwiZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kXFxuIyBSZXNvdXJjZVJlY29yZHNdXVxcXCIgKFRyYWZmaWNQb2xpY3lJbnN0YW5jZUlkIGhhcyBubyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSkuXFxuIyBUaGUgVFRMK0FsaWFzVGFyZ2V0IGNvbWJpbmF0aW9uIGlzIGFscmVhZHkgdGhlIGVuZ2luZSdzIEUzMDI5LCBzbyB0aGlzIHJ1bGVcXG4jIGNvdmVycyB0aGUgcmVtYWluaW5nIHNoYXBlczogYWxpYXMgcGx1cyByZWNvcmRzLCBhbmQgYW4gaW5jb21wbGV0ZSBub24tYWxpYXNcXG4jIGdyb3VwIChyZWNvcmRzIHdpdGhvdXQgVFRMLCBUVEwgd2l0aG91dCByZWNvcmRzLCBvciBuZWl0aGVyKS5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSkgaWYge1xcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIilcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpICE9IG51bGxcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiQWxpYXNUYXJnZXQgYW5kIFJlc291cmNlUmVjb3JkcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIEFsaWFzVGFyZ2V0IG9yIFRUTC1wbHVzLVJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIktlZXAgdGhlIEFsaWFzVGFyZ2V0IGFuZCBkcm9wIFJlc291cmNlUmVjb3Jkcywgb3IgbWFrZSBpdCBhIHBsYWluIHJlY29yZCB3aXRoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRcXFwiQSBub24tYWxpYXMgcmVjb3JkIHNldCBuZWVkcyBib3RoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzOyB0aGUgc2VydmljZSByZWplY3RzIGFuIGluY29tcGxldGUgcGFpciB3aXRoIFxcXFxcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kIFJlc291cmNlUmVjb3Jkc11dIC4uLiBmb3VuZCBub25lXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTcGVjaWZ5IFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzIHRvZ2V0aGVyLCBvciB1c2UgQWxpYXNUYXJnZXQgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKSBpZiB7XFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIGVuZm9yY2VzIFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLFxcbiMgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIEdlb1Byb3hpbWl0eUxvY2F0aW9uLCBvciBDaWRyUm91dGluZ0NvbmZpZ11cXFwiLlxcbiMgR2VvUHJveGltaXR5TG9jYXRpb24gaXMgbm90IGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHksIHNvIGZpdmUgcmVtYWluIGhlcmUuXFxuIyBNdWx0aVZhbHVlQW5zd2VyOiBmYWxzZSBpcyB0cmVhdGVkIGFzIGFic2VudCDigJQgb25seSB0cnVlIHNlbGVjdHMgdGhlIHBvbGljeS5cXG5fcGZfcjUzX3BvbHhfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwcm9wKSBpZiB7XFxuXFx0cHJvcCAhPSBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIikgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpIDo9IHBzIGlmIHtcXG5cXHRwcyA6PSBbcCB8IHNvbWUgcCBpbiBhcnJheS5jb25jYXQoX3BmX3I1M19wb2x4X3Byb3BzLCBbXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXSk7IF9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHApXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3ksIGJ1dCAldiBhcmUgYWxsIHNwZWNpZmllZFxcXCIsIFtwc10pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBzcGxpdCB0aGUgcmVzdCBpbnRvIHNlcGFyYXRlIHJlY29yZCBzZXRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRwcyA6PSBfcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSlcXG5cXHRjb3VudChwcykgPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXRJZGVudGlmaWVyIGFuZCBhIHJvdXRpbmcgcG9saWN5IG11c3QgYXBwZWFyIHRvZ2V0aGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfc2lkcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M19zaWRwX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3NpZHBfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiQSByb3V0aW5nIHBvbGljeSBpcyBjb25maWd1cmVkIGJ1dCBTZXRJZGVudGlmaWVyIGlzIG1pc3Npbmc7IHRoZSBDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiTWlzc2luZyBmaWVsZCAnU2V0SWRlbnRpZmllcidcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFNldElkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYW1vbmcgdGhlIHJlY29yZCBzZXRzIHNoYXJpbmcgdGhpcyBOYW1lIGFuZCBUeXBlXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG5cXHRub3QgaXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIlNldElkZW50aWZpZXIgaXMgc3BlY2lmaWVkIGJ1dCBubyByb3V0aW5nIHBvbGljeSBpczsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgZmluZHMgbm9uZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBTZXRJZGVudGlmaWVyIGZyb20gdGhpcyBzaW1wbGUgcmVjb3JkIHNldCwgb3IgYWRkIHRoZSByb3V0aW5nIHBvbGljeSBpdCB3YXMgbWVhbnQgZm9yXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcblxcdG5vdCBfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUVEwgbXVzdCBmaXQgaW4gMzIgYml0cyAoMC4uMjE0NzQ4MzY0NyBzZWNvbmRzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgOTk5OTk5OTk5OSB3aXRoXFxuIyBcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjE0NzQ4MzY0N1xcXCIuIE5lZ2F0aXZlIFRUTHMgYXJlXFxuIyB1bnRlc3RlZCwgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVFRMIG11c3QgYmUgYXQgbW9zdCAyMTQ3NDgzNjQ3IHNlY29uZHMsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBUVEwgdG8gYSAzMi1iaXQgdmFsdWU7IGFueXRoaW5nIGFib3ZlIGEgZGF5IHJhcmVseSBoZWxwcyBjYWNoaW5nIGFueXdheVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHQpXFxuXFx0biA+IDIxNDc0ODM2NDdcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDMwMCB3aXRoIFxcXCJNZW1iZXJcXG4jIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjU1XFxcIi4gTmVnYXRpdmUgd2VpZ2h0cyBhcmUgdW50ZXN0ZWQsXFxuIyBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJXZWlnaHQgbXVzdCBiZSBhdCBtb3N0IDI1NSwgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFdlaWdodCB0byBhIHZhbHVlIGluIFswLCAyNTVdOyB3ZWlnaHRzIGFyZSByZWxhdGl2ZSwgc28gc2NhbGUgdGhlIGdyb3VwIGRvd24gcHJvcG9ydGlvbmFsbHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih3KVxcblxcdG4gPiAyNTVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSG9zdGVkWm9uZU5hbWUgbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIGRvdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIGxvb2tzIHRoZSB6b25lIHVwIGJ5IHRoZSBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lIGFuZCBkb2VzIG5vdFxcbiMgbm9ybWFsaXplIHRoZSB0cmFpbGluZyBkb3Q6IHRoZSBzYW1lIHN0YWNrIGRlcGxveWVkIGNsZWFuIHdpdGhcXG4jIFxcXCJ6b25lLmV4YW1wbGUuXFxcIiBhbmQgZmFpbGVkIHdpdGggTm90Rm91bmQgZm9yIFxcXCJ6b25lLmV4YW1wbGVcXFwiICgyMDI2LTA5LTAyKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSG9zdGVkWm9uZU5hbWUgJyVzJyBpcyBtaXNzaW5nIHRoZSB0cmFpbGluZyBkb3QsIHNvIENsb3VkRm9ybWF0aW9uIGZhaWxzIHRoZSBsb29rdXAgd2l0aCBcXFxcXFxcIk5vIGhvc3RlZCB6b25lIHdpdGggbmFtZSAuLi4gZm91bmRcXFxcXFxcIlxcXCIsIFt6bl0pLFxcblxcdHNwcmludGYoXFxcIlVzZSAnJXMuJyAod2l0aCB0aGUgdHJhaWxpbmcgZG90KVxcXCIsIFt6bl0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHpuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6bilcXG5cXHR6biAhPSBcXFwiXFxcIlxcblxcdG5vdCBlbmRzd2l0aCh6biwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUcmFuc2ZlciBBY2NlbGVyYXRpb24gcmVqZWN0cyBidWNrZXQgbmFtZXMgd2l0aCBwZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBlbmRwb2ludHMgYXJlIEROUy1iYXNlZCwgc28gYnVja2V0IG5hbWVzIGNvbnRhaW5pbmdcXG4jIHBlcmlvZHMgYXJlIHJlamVjdGVkIGF0IGNyZWF0aW9uLiBPbmx5IGEgbGl0ZXJhbCBCdWNrZXROYW1lIGlzIGNoZWNrYWJsZTtcXG4jIENESy1nZW5lcmF0ZWQgbmFtZXMgbmV2ZXIgY29udGFpbiBwZXJpb2RzIGFueXdheS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2VsZXJhdGVDb25maWd1cmF0aW9uLkFjY2VsZXJhdGlvblN0YXR1c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQnVja2V0IG5hbWUgJyVzJyBjb250YWlucyBwZXJpb2RzLCB3aGljaCBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZG9lcyBub3Qgc3VwcG9ydDsgQ3JlYXRlQnVja2V0IGZhaWxzIHdpdGggXFxcXFxcXCJTMyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgYnVja2V0cyB3aXRoIHBlcmlvZHMgKC4pIGluIHRoZWlyIG5hbWVzXFxcXFxcXCJcXFwiLCBbYm5dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBidWNrZXQgd2l0aG91dCBwZXJpb2RzLCBvciBkcm9wIEFjY2VsZXJhdGVDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvdHJhbnNmZXItYWNjZWxlcmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0Ym4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CdWNrZXROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoYm4pXFxuXFx0Y29udGFpbnMoYm4sIFxcXCIuXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LWFjdGlvbi1yZXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdC1sZXZlbCBhY3Rpb25zIG5lZWQgYW4gb2JqZWN0LWxldmVsIFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIG9iamVjdC1sZXZlbCBhY3Rpb24gd2hvc2Ugc3RhdGVtZW50IGxpc3RzIG9ubHkgYnVja2V0LWxldmVsIEFSTnMgYXBwbGllc1xcbiMgdG8gbm90aGluZywgYW5kIFMzIHJlamVjdHMgdGhlIHBvbGljeS4gQSBidWNrZXQtbGV2ZWwgQVJOIGlzIHByb3ZhYmxlIHR3b1xcbiMgd2F5czogYSBsaXRlcmFsIGFybjouLi46czM6OjpuYW1lIHdpdGggbm8gXFxcIi9cXFwiIGluIHRoZSBuYW1lIHBhcnQsIG9yIGEgdmFsdWVcXG4jIHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG8gdGhlIGxvZ2ljYWwgSUQgb2YgYW4gaW4tdGVtcGxhdGUgYnVja2V0IChSZWYgYW5kXFxuIyBGbjo6R2V0QXR0IEFybiBib3RoIGRvIOKAlCB0aGUgR2V0QXR0IG9mIGEgYnVja2V0IGlzIGl0cyBidWNrZXQgQVJOKS4gRmlyZXNcXG4jIG9ubHkgd2hlbiBldmVyeSByZXNvdXJjZSBpbiB0aGUgc3RhdGVtZW50IGlzIHByb3ZhYmx5IGJ1Y2tldC1sZXZlbCwgc29cXG4jIHVucmVzb2x2YWJsZSBlbnRyaWVzIChlLmcuIEZuOjpTdWIgXFxcIiR7Qi5Bcm59LypcXFwiKSBtdXRlIHRoZSBzdGF0ZW1lbnQuXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpnZXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6cHV0b2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmRlbGV0ZW9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIGxvd2VyKGEpIGluIHtcXFwiczM6YWJvcnRtdWx0aXBhcnR1cGxvYWRcXFwiLCBcXFwiczM6cmVzdG9yZW9iamVjdFxcXCIsIFxcXCJzMzpsaXN0bXVsdGlwYXJ0dXBsb2FkcGFydHNcXFwifVxcblxcbl9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpIGlmIHIgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYge1xcblxcdHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcblxcdGNvbnRhaW5zKHIsIFxcXCI6czM6OjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KHIsIFxcXCI6OjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0bm90IGNvbnRhaW5zKHBhcnRzWzFdLCBcXFwiL1xcXCIpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBbYV0gaWYge1xcblxcdGEgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfczNicGFyX2FjdGlvbnMobmFtZSwgaSkgOj0gYWN0cyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuQWN0aW9uXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGFjdHMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IGl0LnZhbHVlOyBpc19zdHJpbmcodildXFxufVxcblxcbl9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIGkpIDo9IFtyXSBpZiB7XFxuXFx0ciA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSlcXG5cXHRpc19zdHJpbmcocilcXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gcnMgaWYge1xcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdHJzIDo9IFt2IHwgc29tZSBpdCBpbiBpdGVtczsgdiA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlLiVkXFxcIiwgW2ksIGl0LmluZGV4XSkpOyBpc19zdHJpbmcodildXFxuXFx0Y291bnQocnMpID09IGNvdW50KGl0ZW1zKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtzdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIHRhcmdldHMgb2JqZWN0cyBidXQgdGhlIHN0YXRlbWVudCdzIHJlc291cmNlcyBhcmUgYWxsIGJ1Y2tldC1sZXZlbCBBUk5zOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIkFjdGlvbiBkb2VzIG5vdCBhcHBseSB0byBhbnkgcmVzb3VyY2UocykgaW4gc3RhdGVtZW50XFxcXFxcXCJcXFwiLCBbYV0pLFxcblxcdFxcXCJBZGQgdGhlIG9iamVjdCBmb3JtIG9mIHRoZSBBUk4gKGFwcGVuZCAvKiBvciBhIGtleSBwYXR0ZXJuKSB0byBSZXNvdXJjZSwgb3IgZHJvcCB0aGUgb2JqZWN0LWxldmVsIGFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRzb21lIGEgaW4gX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIHN0LmluZGV4KVxcblxcdF9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKVxcblxcdHJzIDo9IF9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIHN0LmluZGV4KVxcblxcdGNvdW50KHJzKSA+IDBcXG5cXHRldmVyeSByIGluIHJzIHtcXG5cXHRcXHRfcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJ1Y2tldCBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIGEgUHJpbmNpcGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlc291cmNlLWJhc2VkIHBvbGljaWVzIHJlcXVpcmUgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIGluIGV2ZXJ5XFxuIyBzdGF0ZW1lbnQg4oCUIHVubGlrZSBpZGVudGl0eSBwb2xpY2llcywgd2hlcmUgY2ZuLWxpbnQtZ3JhZGUgY2hlY2tzIGFyZVxcbiMgdHVuZWQuIEFuIHVucmVzb2x2YWJsZSBQcmluY2lwYWwgdmFsdWUgc3RpbGwgY291bnRzIGFzIHByZXNlbnQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWRcXFwiLCBbc3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIHN0YXRlbWVudCBoYXMgbmVpdGhlciBQcmluY2lwYWwgbm9yIE5vdFByaW5jaXBhbDsgUzMgcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJNaXNzaW5nIHJlcXVpcmVkIGZpZWxkIFByaW5jaXBhbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIHRvIHRoZSBzdGF0ZW1lbnQg4oCUIGJ1Y2tldCBwb2xpY2llcyBhbHdheXMgbmFtZSB3aG8gdGhleSBhcHBseSB0b1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHN0LnZhbHVlLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJOb3RQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaWZlY3ljbGUgYXJjaGl2ZSB0cmFuc2l0aW9ucyBtdXN0IGNvbWUgMzArIGRheXMgYWZ0ZXIgSUEsIGFuZCBleHBpcmF0aW9uIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zM29yZF9maXggOj0gXFxcIk9yZGVyIHRoZSBsaWZlY3ljbGUgZGF5cyBzbyBhcmNoaXZlIHRyYW5zaXRpb25zIGNvbWUgYXQgbGVhc3QgMzAgZGF5cyBhZnRlciBJQSB0cmFuc2l0aW9ucyBhbmQgZXhwaXJhdGlvbiBjb21lcyBhZnRlciBldmVyeSB0cmFuc2l0aW9uXFxcIlxcblxcbl9wZl9zM29yZF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuVHJhbnNpdGlvbnNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRyYW5zaXRpb24gdG8gJXMgYXQgJXYgZGF5cyBpcyBsZXNzIHRoYW4gMzAgZGF5cyBhZnRlciB0aGUgJXMgdHJhbnNpdGlvbiBhdCAldiBkYXlzOyBTMyByZXF1aXJlcyBvYmplY3RzIHRvIHN0YXkgYXQgbGVhc3QgMzAgZGF5cyBpbiBJQSBzdG9yYWdlXFxcIiwgW3NjMiwgZDIsIHNjMSwgZDFdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQxIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQxKVxcblxcdHNjMSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MxIGluIHtcXFwiU1RBTkRBUkRfSUFcXFwiLCBcXFwiT05FWk9ORV9JQVxcXCJ9XFxuXFx0cmF3MSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGQxIDo9IHRvX251bWJlcihyYXcxKVxcblxcdHNvbWUgdDIgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDIpXFxuXFx0c2MyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzIgaW4ge1xcXCJHTEFDSUVSXFxcIiwgXFxcIkRFRVBfQVJDSElWRVxcXCJ9XFxuXFx0cmF3MiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MiAhPSBudWxsXFxuXFx0ZDIgOj0gdG9fbnVtYmVyKHJhdzIpXFxuXFx0ZDIgPCBkMSArIDMwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzICgldikgbXVzdCBiZSBncmVhdGVyIHRoYW4gVHJhbnNpdGlvbkluRGF5cyAoJXYpOyBTMyByZWplY3RzIGxpZmVjeWNsZSBydWxlcyB0aGF0IGV4cGlyZSBvYmplY3RzIGJlZm9yZSBvciB3aGVuIHRoZXkgdHJhbnNpdGlvblxcXCIsIFtlLCBkXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHJhd2UgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGUgOj0gdG9fbnVtYmVyKHJhd2UpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodClcXG5cXHRyYXdkIDo9IG9iamVjdC5nZXQodCwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2QgIT0gbnVsbFxcblxcdGQgOj0gdG9fbnVtYmVyKHJhd2QpXFxuXFx0ZSA8PSBkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHBpcmF0aW9uSW5EYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIEV4cGlyYXRpb25JbkRheXMgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBub1xcbiMgbWluaW11bSwgc28gMCBhbmQgbmVnYXRpdmVzIHJlYWNoIHRoZSBzZXJ2aWNlLiBPbmx5IHRoZSBFeHBpcmF0aW9uIGFjdGlvblxcbiMgd2FzIGJlbmNoLXZlcmlmaWVkOyBvdGhlciBkYXkgZmllbGRzIGFyZSBsZWZ0IGFsb25lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzIGlzICV2OyBTMyByZWplY3RzIHRoZSBydWxlIHdpdGggXFxcXFxcXCInRGF5cycgZm9yIEV4cGlyYXRpb24gYWN0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXFxcXFxcXCJcXFwiLCBbZF0pLFxcblxcdFxcXCJVc2UgYW4gRXhwaXJhdGlvbkluRGF5cyBvZiAxIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1ydWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdyAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3KVxcblxcdGQgPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgbGlmZWN5Y2xlIHJ1bGUgbmVlZHMgYXQgbGVhc3Qgb25lIGFjdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGVuIGFjdGlvbiBmaWVsZHMsIHZlcmJhdGltIGZyb20gdGhlIHNlcnZpY2UgZXJyb3IuIEEgZmllbGQgd2hvc2UgdmFsdWVcXG4jIGlzIGFuIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgc3RpbGwgY291bnRzIGFzIHByZXNlbnQgKGZhaWwgY2xvc2VkKS5cXG5fcGZfczNsbmFfYWN0aW9ucyA6PSB7XFxuXFx0XFxcIkFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZFxcXCIsXFxuXFx0XFxcIkV4cGlyYXRpb25EYXRlXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIkV4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXNcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIlRyYW5zaXRpb25zXFxcIixcXG59XFxuXFxuX3BmX3MzbG5hX2hhc19hY3Rpb24ocnVsZSkgaWYge1xcblxcdHNvbWUgayBpbiBfcGZfczNsbmFfYWN0aW9uc1xcblxcdG9iamVjdC5nZXQocnVsZSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIGxpZmVjeWNsZSBydWxlIHNwZWNpZmllcyBubyBhY3Rpb247IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkF0IGxlYXN0IG9uZSBvZiBbRXhwaXJhdGlvbkRhdGUsRXhwaXJhdGlvbkluRGF5cyxBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQsVHJhbnNpdGlvbiwuLi5dIG5lZWRzIHRvIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGFuIGV4cGlyYXRpb24sIHRyYW5zaXRpb24sIG9yIGFib3J0LWluY29tcGxldGUtbXVsdGlwYXJ0LXVwbG9hZCBhY3Rpb24gdG8gdGhlIHJ1bGUsIG9yIHJlbW92ZSB0aGUgcnVsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRub3QgX3BmX3MzbG5hX2hhc19hY3Rpb24oci52YWx1ZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vdGlmaWNhdGlvbiBlbnRyaWVzIG11c3Qgbm90IG92ZXJsYXAgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUzMga2VlcHMgb25lIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIHBlciBidWNrZXQgYW5kIHJlamVjdHMgaXQgd2hlbiB0d29cXG4jIGVudHJpZXMgKGFjcm9zcyBxdWV1ZS90b3BpYy9sYW1iZGEgYWxpa2UpIGNvdWxkIG1hdGNoIHRoZSBzYW1lIG9iamVjdCBldmVudDpcXG4jIG92ZXJsYXBwaW5nIGV2ZW50IHR5cGVzIEFORCBvdmVybGFwcGluZyBwcmVmaXhlcyBBTkQgb3ZlcmxhcHBpbmcgc3VmZml4ZXMuXFxuIyBBIG1pc3NpbmcgZmlsdGVyIHNpZGUgbWVhbnMgXFxcIlxcXCIgYW5kIG92ZXJsYXBzIGV2ZXJ5dGhpbmcuIFBhaXJzIHdpdGggYW5cXG4jIHVucmVzb2x2YWJsZSBldmVudCBvciBmaWx0ZXIgdmFsdWUgYXJlIHNraXBwZWQg4oCUIG92ZXJsYXAgY2Fubm90IGJlIHByb3Zlbi5cXG5cXG5fcGZfczNub19jb25maWdzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChhcnJheS5jb25jYXQoXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uUXVldWVDb25maWd1cmF0aW9uc1xcXCIpXSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5Ub3BpY0NvbmZpZ3VyYXRpb25zXFxcIildKSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5MYW1iZGFDb25maWd1cmF0aW9uc1xcXCIpXSlcXG5cXG5fcGZfczNub19ydWxlcyhjKSA6PSBydWxlcyBpZiB7XFxuXFx0ZiA6PSBvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChmKVxcblxcdGsgOj0gb2JqZWN0LmdldChmLCBcXFwiUzNLZXlcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChrKVxcblxcdHJ1bGVzIDo9IG9iamVjdC5nZXQoaywgXFxcIlJ1bGVzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkocnVsZXMpXFxufVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IFtdIGlmIHtcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gdiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA+IDBcXG5cXHR2IDo9IHZzWzBdXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gXFxcIlxcXCIgaWYge1xcblxcdHZzIDo9IFt4IHwgc29tZSByIGluIF9wZl9zM25vX3J1bGVzKGMpOyBpc19vYmplY3Qocik7IGxvd2VyKG9iamVjdC5nZXQociwgXFxcIk5hbWVcXFwiLCBcXFwiXFxcIikpID09IGtpbmQ7IHggOj0gb2JqZWN0LmdldChyLCBcXFwiVmFsdWVcXFwiLCBudWxsKV1cXG5cXHRjb3VudCh2cykgPT0gMFxcbn1cXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fcHJlX292ZXJsYXAoYSwgYikgaWYgc3RhcnRzd2l0aChiLCBhKVxcblxcbl9wZl9zM25vX3N1Zl9vdmVybGFwKGEsIGIpIGlmIGVuZHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYiwgYSlcXG5cXG4jIFxcXCJzMzpPYmplY3RDcmVhdGVkOipcXFwiIGNvdmVycyBcXFwiczM6T2JqZWN0Q3JlYXRlZDpQdXRcXFwiOyBkcm9wIHRoZSB0cmFpbGluZyBcXFwiKlxcXCJcXG4jIGFuZCBwcmVmaXgtbWF0Y2guXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIGUxID09IGUyXFxuXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIHtcXG5cXHRlbmRzd2l0aChlMSwgXFxcIjoqXFxcIilcXG5cXHRzdGFydHN3aXRoKGUyLCBzdWJzdHJpbmcoZTEsIDAsIGNvdW50KGUxKSAtIDEpKVxcbn1cXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUyLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTEsIHN1YnN0cmluZyhlMiwgMCwgY291bnQoZTIpIC0gMSkpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbm90aWZpY2F0aW9uLW92ZXJsYXBwaW5nLWZpbHRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlR3byBub3RpZmljYXRpb24gZW50cmllcyBmb3Igb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgKCclcycgYW5kICclcycpIGhhdmUgb3ZlcmxhcHBpbmcgcHJlZml4L3N1ZmZpeCBmaWx0ZXJzOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJDb25maWd1cmF0aW9uIGlzIGFtYmlndW91c2x5IGRlZmluZWQuIENhbm5vdCBoYXZlIG92ZXJsYXBwaW5nIHN1ZmZpeGVzIGluIHR3byBydWxlcyBpZiB0aGUgcHJlZml4ZXMgYXJlIG92ZXJsYXBwaW5nIGZvciB0aGUgc2FtZSBldmVudCB0eXBlLlxcXFxcXFwiXFxcIiwgW2UxLCBlMl0pLFxcblxcdFxcXCJNYWtlIHRoZSBwcmVmaXhlcyBvciBzdWZmaXhlcyBkaXNqb2ludCwgb3IgbWVyZ2UgdGhlIHR3byBlbnRyaWVzIGludG8gb25lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbm90aWZpY2F0aW9uLWhvdy10by1maWx0ZXJpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y3MgOj0gX3BmX3Mzbm9fY29uZmlncyhuYW1lKVxcblxcdHNvbWUgaSwgYSBpbiBjc1xcblxcdHNvbWUgaiwgYiBpbiBjc1xcblxcdGkgPCBqXFxuXFx0ZTEgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiRXZlbnRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhlMSlcXG5cXHRlMiA6PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUyKVxcblxcdF9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKVxcblxcdHAxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAxKVxcblxcdHAyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAyKVxcblxcdF9wZl9zM25vX3ByZV9vdmVybGFwKHAxLCBwMilcXG5cXHRzMSA6PSBfcGZfczNub19maWx0ZXJfdmFsKGEudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMSlcXG5cXHRzMiA6PSBfcGZfczNub19maWx0ZXJfdmFsKGIudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMilcXG5cXHRfcGZfczNub19zdWZfb3ZlcmxhcChzMSwgczIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdExvY2tDb25maWd1cmF0aW9uIG9uIGl0cyBvd24gZG9lcyBOT1QgcmVxdWlyZSBPYmplY3RMb2NrRW5hYmxlZCDigJRcXG4jIFMzIGFjY2VwdHMgT2JqZWN0IExvY2sgb24gYW4gZXhpc3RpbmcgdmVyc2lvbmVkIGJ1Y2tldCAoYmVuY2ggczA1YiBkZXBsb3llZFxcbiMgY2xlYW4pLiBXaGF0IGl0IGRvZXMgcmVxdWlyZSBpcyB2ZXJzaW9uaW5nLiBXaGVuIE9iamVjdExvY2tFbmFibGVkIGlzIHRydWVcXG4jIHRoZSBidWNrZXQgaXMgY3JlYXRlZCBsb2NrLWVuYWJsZWQgYW5kIHZlcnNpb25pbmcgY29tZXMgd2l0aCBpdCwgc28gdGhlIHJ1bGVcXG4jIGZpcmVzIG9ubHkgd2hlbiBsb2NrLWVuYWJsZW1lbnQgaXMgcHJvdmFibHkgb2ZmIChrZXkgbGl0ZXJhbGx5IGFic2VudCBvclxcbiMgbGl0ZXJhbCBmYWxzZSkgYW5kIHZlcnNpb25pbmcgaXMgcHJvdmFibHkgbm90IGVuYWJsZWQuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJPYmplY3RMb2NrRW5hYmxlZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gZmFsc2VcXG59XFxuXFxuX3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIk9iamVjdExvY2tDb25maWd1cmF0aW9uIGlzIHNldCBvbiBhIGJ1Y2tldCB3aG9zZSB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQgdG8gYXBwbHkgYSBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJywgb3Igc2V0IE9iamVjdExvY2tFbmFibGVkOiB0cnVlIHRvIGNyZWF0ZSB0aGUgYnVja2V0IGxvY2stZW5hYmxlZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSlcXG5cXHRfcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdCBMb2NrIGZvcmJpZHMgc3VzcGVuZGluZyB2ZXJzaW9uaW5nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdCBMb2NrIGZvcmNlLWVuYWJsZXMgdmVyc2lvbmluZyBhdCBjcmVhdGlvbiwgc28gYSB0ZW1wbGF0ZSB0aGF0IGFsc29cXG4jIHN1c3BlbmRzIHZlcnNpb25pbmcgY29udHJhZGljdHMgaXRzZWxmIGFuZCB0aGUgaGFuZGxlcidzIFB1dEJ1Y2tldFZlcnNpb25pbmdcXG4jIGNhbGwgaXMgcmVqZWN0ZWQuIEZpcmVzIG9ubHkgb24gYSBsaXRlcmFsIFxcXCJTdXNwZW5kZWRcXFwiLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZSBidXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gc3VzcGVuZHMgdmVyc2lvbmluZzsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBpcyBwcmVzZW50IG9uIHRoaXMgYnVja2V0LCBzbyB0aGUgdmVyc2lvbmluZyBzdGF0ZSBjYW5ub3QgYmUgY2hhbmdlZC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIChvciBkcm9wIGl0IOKAlCBPYmplY3QgTG9jayBlbmFibGVzIHZlcnNpb25pbmcgaXRzZWxmKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgcmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0IG5lZWRzIHZlcnNpb25pbmcgZW5hYmxlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZGVzdGluYXRpb24gc2lkZSBvZiB3aGF0IHBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmcgY2hlY2tzIG9uXFxuIyB0aGUgc291cmNlLiBEZXN0aW5hdGlvbi5CdWNrZXQgaXMgbm9ybWFsbHkgRm46OkdldEF0dC9SZWYgdG8gYW4gaW4tdGVtcGxhdGVcXG4jIGJ1Y2tldDsgcmVzb2x2ZSgpIHR1cm5zIGJvdGggaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCwgc28gdGhlXFxuIyBkZXN0aW5hdGlvbidzIG93biBwcm9wZXJ0aWVzIGFyZSByZWFkYWJsZS4gRXh0ZXJuYWwgZGVzdGluYXRpb24gQVJOcyByZXNvbHZlXFxuIyB0byBzdHJpbmdzIHRoYXQgYXJlIG5vdCBsb2dpY2FsIElEcyBhbmQgc2tpcC4gVmVyc2lvbmluZyBpcyBcXFwibm90IGVuYWJsZWRcXFwiXFxuIyB3aGVuIFZlcnNpb25pbmdDb25maWd1cmF0aW9uIGlzIGxpdGVyYWxseSBhYnNlbnQgKHByb3ZlbiB2aWFcXG4jIGlucHV0LnJlc291cmNlcywgc2VlIEFHRU5UUy5tZCkgb3IgU3RhdHVzIHJlc29sdmVzIHRvIFxcXCJTdXNwZW5kZWRcXFwiOyBhblxcbiMgdW5yZXNvbHZhYmxlIFN0YXR1cyBza2lwcy5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tkZXN0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpIGlmIHtcXG5cXHRyZXNvbHZlKGRlc3QsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tZGVzdC12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5EZXN0aW5hdGlvbi5CdWNrZXRcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGJ1Y2tldCAnJXMnIGRvZXMgbm90IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJEZXN0aW5hdGlvbiBidWNrZXQgbXVzdCBoYXZlIHZlcnNpb25pbmcgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW2Rlc3RdKSxcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3JlcGxpY2F0aW9uLXJlcXVpcmVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0ZGVzdCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSkpXFxuXFx0aXNfc3RyaW5nKGRlc3QpXFxuXFx0ZGVzdCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRfcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIHJlcXVpcmVzIHZlcnNpb25pbmcgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc291cmNlIGJ1Y2tldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDpgZXlj43jgavjgZnjgovjga7jga8gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24g44GM5paH5a2X44Gp44GK44KK5LiN5Zyo77yIaW5wdXQucmVzb3VyY2VzIOOBp1xcbiMg6Ki85piO44CBQUdFTlRTLm1kIOWPgueFp++8ieOBi+OAgVN0YXR1cyDjgYzjg6rjg4bjg6njg6vjgacgXFxcIlN1c3BlbmRlZFxcXCIg44Gu44Go44GN44Gg44GR44CCXFxuIyDmnKrop6Pmsbrjg4jjg7zjgq/jg7Pjga8gT0sg5omx44GE77yIcmVzb2x2ZSgpIOOBr+OCreODvOS4jeWcqOOBqOacquino+axuuOBruS4oeaWueOBpyB1bmRlZmluZWQg44GrXFxuIyDjgarjgovjgZ/jgoHjgIFgbm90IHJlc29sdmUoLi4uKWAg44Gn44Gv5LiN5Zyo44KS6Ki85piO44Gn44GN44Gq44GEIOKAlCAyMDI2LTA5LTAyIOWun+a4rO+8ieOAglxcbl9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IGJ1Y2tldCB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGF0IGRlcGxveSB0aW1lIChJbnZhbGlkUmVxdWVzdDogVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0KVxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBzb3VyY2UgYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdF9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy13ZWJzaXRlLXJlZGlyZWN0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlZGlyZWN0QWxsUmVxdWVzdHNUbyBleGNsdWRlcyBldmVyeSBvdGhlciB3ZWJzaXRlIHNldHRpbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHJlZGlyZWN0cyB0aGUgd2hvbGUgc2l0ZSwgc28gUzMgcmVqZWN0cyBhbnkgc2libGluZ1xcbiMgd2Vic2l0ZSBzZXR0aW5nIGFsb25nc2lkZSBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJXZWJzaXRlQ29uZmlndXJhdGlvbiBjb21iaW5lcyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gd2l0aCAlczsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiW0luZGV4RG9jdW1lbnQsIEVycm9yRG9jdW1lbnQsIFJvdXRpbmdSdWxlc10gc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaWYgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gYWxvbmUsIG9yIGRyb3AgaXQgYW5kIGNvbmZpZ3VyZSB0aGUgd2Vic2l0ZSB3aXRoIEluZGV4RG9jdW1lbnQvRXJyb3JEb2N1bWVudC9Sb3V0aW5nUnVsZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC13ZWJzaXRlY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHR3YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uXFxcIilcXG5cXHRpc19vYmplY3Qod2MpXFxuXFx0b2JqZWN0LmdldCh3YywgXFxcIlJlZGlyZWN0QWxsUmVxdWVzdHNUb1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4ge1xcXCJJbmRleERvY3VtZW50XFxcIiwgXFxcIkVycm9yRG9jdW1lbnRcXFwiLCBcXFwiUm91dGluZ1J1bGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHdjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGTEVYSUJMRSBtb2RlIG5lZWRzIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIE9GRiBmb3JiaWRzIGl0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2NoZndfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXNjaGVkdWxlci1zY2hlZHVsZS1mbGV4aWJsZXRpbWV3aW5kb3cuaHRtbFxcXCJcXG5cXG5fcGZfc2NoZndfZnR3KG5hbWUpIDo9IGZ0dyBpZiB7XFxuXFx0ZnR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93XFxcIilcXG5cXHRpc19vYmplY3QoZnR3KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgRkxFWElCTEUgYnV0IE1heGltdW1XaW5kb3dJbk1pbnV0ZXMgaXMgbWlzc2luZzsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBiZSBwcm92aWRlZCB3aGVuIEZsZXhpYmxlVGltZVdpbmRvd01vZGUgaXMgc2V0IHRvIEZMRVhJQkxFXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgTWF4aW11bVdpbmRvd0luTWludXRlcyAoMS0xNDQwKSwgb3Igc3dpdGNoIE1vZGUgdG8gT0ZGXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIkZMRVhJQkxFXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3cuTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsXFxuXFx0XFxcIkZsZXhpYmxlVGltZVdpbmRvdy5Nb2RlIGlzIE9GRiBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBzZXQ7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzIG11c3Qgbm90IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gT0ZGXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIG9yIHN3aXRjaCBNb2RlIHRvIEZMRVhJQkxFXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIk9GRlxcXCJcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzY2hlZHVsZXJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBTY2hlZHVsZXIgcmF0ZSgpIHZhbHVlIG11c3QgYmUgcG9zaXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDI3IHZhbGlkYXRlcyByYXRlKCkgYm91bmRzIGZvciBBV1M6OkV2ZW50czo6UnVsZSBidXQgbm90XFxuIyBmb3IgQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlIOKAlCBzYW1lIGNvbnN0cmFpbnQgZmFtaWx5LCBkaWZmZXJlbnQgcmVzb3VyY2UuXFxuIyBPbmx5IHRoZSB2YWx1ZSBib3VuZCBpcyBjaGVja2VkIGhlcmU7IHVuaXQgc3BlbGxpbmdzIGRpZmZlciBiZXR3ZWVuIHRoZSB0d29cXG4jIHNlcnZpY2VzIGFuZCB3ZXJlIG5vdCBtZWFzdXJlZCBmb3IgU2NoZWR1bGVyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJhdGUgdmFsdWUgaW4gJyVzJyBpcyBub3QgcG9zaXRpdmU7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIFNjaGVkdWxlIEV4cHJlc3Npb24gJXMuXFxcXFxcXCJcXFwiLCBbZXhwciwgZXhwcl0pLFxcblxcdFxcXCJVc2UgYSByYXRlIG9mIDEgb3IgbW9yZSAoZS5nLiByYXRlKDUgbWludXRlcykpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NjaGVkdWxlci9sYXRlc3QvVXNlckd1aWRlL3NjaGVkdWxlLXR5cGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlZHVsZUV4cHJlc3Npb25cXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcInJhdGUoXFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiKVxcXCIpXFxuXFx0aW5uZXIgOj0gdHJpbV9zcGFjZShzdWJzdHJpbmcodCwgNSwgY291bnQodCkgLSA2KSlcXG5cXHRwYXJ0cyA6PSBzcGxpdChpbm5lciwgXFxcIiBcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHBhcnRzWzBdKVxcblxcdG4gPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSFRUUC9TIERlbGl2ZXJ5UG9saWN5IHJldHJ5IHZhbHVlczogbWluRGVsYXlUYXJnZXQgPj0gMSwgbWF4RGVsYXlUYXJnZXQgPD0gMzYwMCBhbmQgPj0gbWluRGVsYXlUYXJnZXQsIG51bVJldHJpZXMgMC4uMTAwIGFuZCBhdCBsZWFzdCB0aGUgc3VtIG9mIHRoZSBwaGFzZSByZXRyaWVzLCBwaGFzZSBjb3VudHMgPj0gMCwgYmFja29mZkZ1bmN0aW9uIG9uZSBvZiBhcml0aG1ldGljfGV4cG9uZW50aWFsfGdlb21ldHJpY3xsaW5lYXIsIG1heFJlY2VpdmVzUGVyU2Vjb25kID49IDEgKHN1YnNjcmlwdGlvbiBEZWxpdmVyeVBvbGljeSBhbmQgdG9waWMgRGVsaXZlcnlQb2xpY3kuaHR0cClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLW1lc3NhZ2UtZGVsaXZlcnktcmV0cmllcy5odG1sXFxcIlxcblxcbl9wZl9zbnNkcF9maXggOj0gXFxcIktlZXAgdGhlIHJldHJ5IHBvbGljeSBpbnNpZGUgdGhlIGRvY3VtZW50ZWQgcmFuZ2VzIChzZWUgdGhlIGRlbGl2ZXJ5IHBvbGljeSB0YWJsZSlcXFwiXFxuXFxuIyBbbmFtZSwgcGF0aCBwcmVmaXgsIGhlYWx0aHlSZXRyeVBvbGljeSBvYmplY3QsIHRocm90dGxlUG9saWN5IG9iamVjdCBvciBudWxsXVxcbl9wZl9zbnNkcF9vYmoodikgOj0gdiBpZiBpc19vYmplY3QodilcXG5cXG5fcGZfc25zZHBfb2JqKHYpIDo9IG8gaWYge1xcblxcdGlzX3N0cmluZyh2KVxcblxcdG8gOj0ganNvbi51bm1hcnNoYWwodilcXG5cXHRpc19vYmplY3QobylcXG59XFxuXFxuX3BmX3Nuc2RwX3BvbCBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXMuRGVsaXZlcnlQb2xpY3lcXFwiLCBkcF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0ZHAgOj0gX3BmX3Nuc2RwX29iaihvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiRGVsaXZlcnlQb2xpY3lcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX3Nuc2RwX3BvbCBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXMuRGVsaXZlcnlQb2xpY3kuaHR0cFxcXCIsIGRwXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHRvcCA6PSBfcGZfc25zZHBfb2JqKG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJEZWxpdmVyeVBvbGljeVxcXCIsIG51bGwpKVxcblxcdGRwIDo9IG9iamVjdC5nZXQodG9wLCBcXFwiaHR0cFxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGRwKVxcbn1cXG5cXG5fcGZfc25zZHBfcmV0cnkgY29udGFpbnMgW25hbWUsIHBhdGgsIGhyXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgZHBdIGluIF9wZl9zbnNkcF9wb2xcXG5cXHRzb21lIGtleSBpbiBbXFxcImhlYWx0aHlSZXRyeVBvbGljeVxcXCIsIFxcXCJkZWZhdWx0SGVhbHRoeVJldHJ5UG9saWN5XFxcIl1cXG5cXHRociA6PSBvYmplY3QuZ2V0KGRwLCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KGhyKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbcCwga2V5XSlcXG59XFxuXFxuX3BmX3Nuc2RwX21pbiBjb250YWlucyBbXFxcIm1pbkRlbGF5VGFyZ2V0XFxcIiwgMV1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtUmV0cmllc1xcXCIsIDBdXFxuXFxuX3BmX3Nuc2RwX21pbiBjb250YWlucyBbXFxcIm51bU5vRGVsYXlSZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtTWluRGVsYXlSZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtTWF4RGVsYXlSZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWF4IGNvbnRhaW5zIFtcXFwibWF4RGVsYXlUYXJnZXRcXFwiLCAzNjAwXVxcblxcbl9wZl9zbnNkcF9tYXggY29udGFpbnMgW1xcXCJudW1SZXRyaWVzXFxcIiwgMTAwXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbcGF0aCwgZl0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIGJlbG93ICV2OyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi4lcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAldlxcXFxcXFwiXFxcIiwgW2YsIHYsIG0sIGYsIG1dKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgaHJdIGluIF9wZl9zbnNkcF9yZXRyeVxcblxcdHNvbWUgW2YsIG1dIGluIF9wZl9zbnNkcF9taW5cXG5cXHR2IDo9IG9iamVjdC5nZXQoaHIsIGYsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA8IG1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZGVsaXZlcnktcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtwYXRoLCBmXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgYWJvdmUgJXY7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IC4uLiVzIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICV2XFxcXFxcXCJcXFwiLCBbZiwgdiwgbSwgZiwgbV0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0c29tZSBbZiwgbV0gaW4gX3BmX3Nuc2RwX21heFxcblxcdHYgOj0gb2JqZWN0LmdldChociwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2ID4gbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLm1heERlbGF5VGFyZ2V0XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJtYXhEZWxheVRhcmdldCAldiBpcyBiZWxvdyBtaW5EZWxheVRhcmdldCAldjsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogLi4ubWF4RGVsYXlUYXJnZXQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluRGVsYXlUYXJnZXRcXFxcXFxcIlxcXCIsIFtteCwgbW5dKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgaHJdIGluIF9wZl9zbnNkcF9yZXRyeVxcblxcdG1uIDo9IG9iamVjdC5nZXQoaHIsIFxcXCJtaW5EZWxheVRhcmdldFxcXCIsIG51bGwpXFxuXFx0bXggOj0gb2JqZWN0LmdldChociwgXFxcIm1heERlbGF5VGFyZ2V0XFxcIiwgbnVsbClcXG5cXHRpc19udW1iZXIobW4pXFxuXFx0aXNfbnVtYmVyKG14KVxcblxcdG14IDwgbW5cXG59XFxuXFxuX3BmX3Nuc2RwX3BoYXNlKGhyLCBmKSA6PSB2IGlmIHtcXG5cXHR2IDo9IG9iamVjdC5nZXQoaHIsIGYsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxufVxcblxcbl9wZl9zbnNkcF9waGFzZShociwgZikgOj0gMCBpZiBub3QgaXNfbnVtYmVyKG9iamVjdC5nZXQoaHIsIGYsIG51bGwpKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMubnVtUmV0cmllc1xcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwibnVtUmV0cmllcyAldiBpcyBiZWxvdyB0aGUgcGhhc2UgdG90YWwgJXYgKG51bU5vRGVsYXlSZXRyaWVzICsgbnVtTWluRGVsYXlSZXRyaWVzICsgbnVtTWF4RGVsYXlSZXRyaWVzKTsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogLi4ubnVtUmV0cmllcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0b3RhbCBvZiBudW1NaW5EZWxheVJldHJpZXMsIG51bU5vRGVsYXlSZXRyaWVzIGFuZCBudW1NYXhEZWxheVJldHJpZXNcXFxcXFxcIlxcXCIsIFtuLCB0b3RhbF0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0biA6PSBvYmplY3QuZ2V0KGhyLCBcXFwibnVtUmV0cmllc1xcXCIsIG51bGwpXFxuXFx0aXNfbnVtYmVyKG4pXFxuXFx0dG90YWwgOj0gKF9wZl9zbnNkcF9waGFzZShociwgXFxcIm51bU5vRGVsYXlSZXRyaWVzXFxcIikgKyBfcGZfc25zZHBfcGhhc2UoaHIsIFxcXCJudW1NaW5EZWxheVJldHJpZXNcXFwiKSkgKyBfcGZfc25zZHBfcGhhc2UoaHIsIFxcXCJudW1NYXhEZWxheVJldHJpZXNcXFwiKVxcblxcdG4gPCB0b3RhbFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLmJhY2tvZmZGdW5jdGlvblxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiYmFja29mZkZ1bmN0aW9uICclcycgaXMgbm90IGFyaXRobWV0aWMsIGV4cG9uZW50aWFsLCBnZW9tZXRyaWMgb3IgbGluZWFyOyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi4gdGhlIHZhbHVlIFslc10gaXMgbm90IGEgdmFsaWQgYmFja29mZiBmdW5jdGlvblxcXFxcXFwiXFxcIiwgW2IsIGJdKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgaHJdIGluIF9wZl9zbnNkcF9yZXRyeVxcblxcdGIgOj0gb2JqZWN0LmdldChociwgXFxcImJhY2tvZmZGdW5jdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGIpXFxuXFx0bm90IGIgaW4ge1xcXCJhcml0aG1ldGljXFxcIiwgXFxcImV4cG9uZW50aWFsXFxcIiwgXFxcImdlb21ldHJpY1xcXCIsIFxcXCJsaW5lYXJcXFwifVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzLm1heFJlY2VpdmVzUGVyU2Vjb25kXFxcIiwgW3AsIGtleV0pLFxcblxcdHNwcmludGYoXFxcIm1heFJlY2VpdmVzUGVyU2Vjb25kICV2IGlzIGJlbG93IDE7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IHRocm90dGxlUG9saWN5Lm1heFJlY2VpdmVzUGVyU2Vjb25kIG11c3QgYmUgPj0gMVxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgZHBdIGluIF9wZl9zbnNkcF9wb2xcXG5cXHRzb21lIGtleSBpbiBbXFxcInRocm90dGxlUG9saWN5XFxcIiwgXFxcImRlZmF1bHRUaHJvdHRsZVBvbGljeVxcXCJdXFxuXFx0dHAgOj0gb2JqZWN0LmdldChkcCwga2V5LCBudWxsKVxcblxcdGlzX29iamVjdCh0cClcXG5cXHR2IDo9IG9iamVjdC5nZXQodHAsIFxcXCJtYXhSZWNlaXZlc1BlclNlY29uZFxcXCIsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA8IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGVudEJhc2VkRGVkdXBsaWNhdGlvbiwgQXJjaGl2ZVBvbGljeSBhbmQgRmlmb1Rocm91Z2hwdXRTY29wZSBhcmUgRklGTy1vbmx5IHRvcGljIGF0dHJpYnV0ZXMsIGFuZCBBcmNoaXZlUG9saWN5Lk1lc3NhZ2VSZXRlbnRpb25QZXJpb2QgaXMgMS4uMzY1IGRheXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmb191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlVG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZm9fZml4IDo9IFxcXCJTZXQgRmlmb1RvcGljOiB0cnVlICh3aXRoIGEgKi5maWZvIFRvcGljTmFtZSkgb3IgZHJvcCB0aGUgRklGTy1vbmx5IGF0dHJpYnV0ZXM7IGtlZXAgdGhlIGFyY2hpdmUgcmV0ZW50aW9uIHdpdGhpbiAxLTM2NSBkYXlzXFxcIlxcblxcbl9wZl9zbnNmb19zdGQodCkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1t0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvVG9waWNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmb19zdGQodCkgaWYgcmVzb2x2ZSh0LCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKSBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBvbiBhIHN0YW5kYXJkIHRvcGljIChGaWZvVG9waWMgaXMgbm90IHRydWUpOyBDcmVhdGVUb3BpYyBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBVbmtub3duIGF0dHJpYnV0ZSAlc1xcXFxcXFwiXFxcIiwgW2F0dHIsIGF0dHJdKSxcXG5cXHRfcGZfc25zZm9fZml4LCBfcGZfc25zZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdF9wZl9zbnNmb19zdGQobmFtZSlcXG5cXHRzb21lIGF0dHIgaW4gW1xcXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uXFxcIiwgXFxcIkFyY2hpdmVQb2xpY3lcXFwiLCBcXFwiRmlmb1Rocm91Z2hwdXRTY29wZVxcXCJdXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgYXR0ciwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc25zZm9fYXJjaGl2ZShuYW1lKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiQXJjaGl2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nuc2ZvX2FyY2hpdmUobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkFyY2hpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc25zZm9fbnVtKHYpIDo9IHYgaWYgaXNfbnVtYmVyKHYpXFxuXFxuX3BmX3Nuc2ZvX251bSh2KSA6PSB0b19udW1iZXIodikgaWYge1xcblxcdGlzX3N0cmluZyh2KVxcblxcdHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHYpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tb25seS1hdHRyaWJ1dGVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BcmNoaXZlUG9saWN5Lk1lc3NhZ2VSZXRlbnRpb25QZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIkFyY2hpdmVQb2xpY3kuTWVzc2FnZVJldGVudGlvblBlcmlvZCAldiBpcyBvdXRzaWRlIDEuLjM2NSBkYXlzOyBDcmVhdGVUb3BpYyBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBBcmNoaXZlUG9saWN5OiBNZXNzYWdlUmV0ZW50aW9uUGVyaW9kIHZhbHVlIGlzIGludmFsaWRcXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0X3BmX3Nuc2ZvX2ZpeCwgX3BmX3Nuc2ZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRuIDo9IF9wZl9zbnNmb19udW0ob2JqZWN0LmdldChfcGZfc25zZm9fYXJjaGl2ZShuYW1lKSwgXFxcIk1lc3NhZ2VSZXRlbnRpb25QZXJpb2RcXFwiLCBudWxsKSlcXG5cXHRfcGZfc25zZm9fb3V0KG4pXFxufVxcblxcbl9wZl9zbnNmb19vdXQobikgaWYgbiA8IDFcXG5cXG5fcGZfc25zZm9fb3V0KG4pIGlmIG4gPiAzNjVcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXF1ZXVlLW9uLXN0YW5kYXJkLXRvcGljXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgRklGTyBTUVMgcXVldWUgY2Fubm90IHN1YnNjcmliZSB0byBhIHN0YW5kYXJkIHRvcGljIChhIEZJRk8gdG9waWMgbWF5IGZhbiBvdXQgdG8gc3RhbmRhcmQgcXVldWVzLCBub3QgdGhlIHJldmVyc2UpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmcXNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtZmlmby10b3BpY3MuaHRtbFxcXCJcXG5cXG5fcGZfc25zZnFzX2ZpeCA6PSBcXFwiU3Vic2NyaWJlIHRoZSBGSUZPIHF1ZXVlIHRvIGEgRklGTyB0b3BpYywgb3IgdXNlIGEgc3RhbmRhcmQgcXVldWVcXFwiXFxuXFxuX3BmX3Nuc2Zxc19zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmcXNfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zZnFzX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbiMgdG9waWMgaXMgRklGTzogYW4gaW4tdGVtcGxhdGUgdG9waWMgd2l0aCBGaWZvVG9waWMgdHJ1ZSwgb3IgYSBsaXRlcmFsIEFSTiBlbmRpbmcgaW4gLmZpZm9cXG5fcGZfc25zZnFzX3RmaWZvKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Zxc190Zmlmbyh0KSBpZiB7XFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxuX3BmX3Nuc2Zxc190c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1t0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvVG9waWNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmcXNfdHN0ZCh0KSBpZiB7XFxuXFx0dCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRyZXNvbHZlKHQsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Zxc190c3RkKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRub3QgZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxuX3BmX3Nuc2Zxc19xZmlmbyhlcCkgaWYge1xcblxcdGVwIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHJlc29sdmUoZXAsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxufVxcblxcbl9wZl9zbnNmcXNfcWZpZm8oZXApIGlmIHtcXG5cXHRzdGFydHN3aXRoKGVwLCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgoZXAsIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tcXVldWUtb24tc3RhbmRhcmQtdG9waWNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkVuZHBvaW50XFxcIiwgW3BhdGhdKSxcXG5cXHRcXFwiYSBGSUZPIHF1ZXVlIGlzIHN1YnNjcmliZWQgdG8gYSBzdGFuZGFyZCB0b3BpYzsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW5kcG9pbnQgUmVhc29uOiBGSUZPIFNRUyBRdWV1ZXMgY2FuIG5vdCBiZSBzdWJzY3JpYmVkIHRvIHN0YW5kYXJkIFNOUyB0b3BpY3NcXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nuc2Zxc19maXgsIF9wZl9zbnNmcXNfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCB0b3BpY10gaW4gX3BmX3Nuc2Zxc19zdWJcXG5cXHRfcGZfc25zZnFzX3RzdGQodG9waWMpXFxuXFx0X3BmX3Nuc2Zxc19wcm90byhuYW1lLCBwYXRoKSA9PSBcXFwic3FzXFxcIlxcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhlcClcXG5cXHRfcGZfc25zZnFzX3FmaWZvKGVwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXRvcGljLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyB0b3BpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICcuZmlmbycgKGFuZCAnLmZpZm8nIG5hbWVzIHJlcXVpcmUgRmlmb1RvcGljKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZpZm9fZml4IDo9IFxcXCJHaXZlIEZJRk8gdG9waWNzIGEgVG9waWNOYW1lIGVuZGluZyBpbiAnLmZpZm8nIChvciBkcm9wIFRvcGljTmFtZSB0byBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lKSwgYW5kIHNldCBGaWZvVG9waWM6IHRydWUgd2hlbmV2ZXIgdGhlIG5hbWUgZW5kcyBpbiAnLmZpZm8nXFxcIlxcblxcbl9wZl9zbnNmaWZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWNyZWF0ZS1maWZvLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBGaWZvVG9waWMg44GM5a2Y5Zyo44GX44CB44Oq44OG44Op44OrIGZhbHNlIOS7peWklu+8iHRydWUg44KE44OI44O844Kv44Oz77yJ44Gq44KJ44CMRklGTyDjgYvjgoLjgZfjgozjgarjgYTjgI3mibHjgYRcXG5fcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpIGlmIHtcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIilcXG5cXHRub3QgdiBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGaWZvVG9waWMgaXMgdHJ1ZSBidXQgVG9waWNOYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5maWZvJzsgU05TIHJlamVjdHMgdGhlIHRvcGljIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0bm90IGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgZW5kcyB3aXRoICcuZmlmbycgYnV0IEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZTsgU05TIHJlamVjdHMgdGhlIHRvcGljIG5hbWUgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcblxcdG5vdCBfcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tdG9waWMtcHJvdG9jb2xcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBGSUZPIHRvcGljIG9ubHkgYWNjZXB0cyBzcXMgc3Vic2NyaXB0aW9ucyAobGFtYmRhLCBodHRwL2h0dHBzLCBlbWFpbCwgZW1haWwtanNvbiwgc21zLCBmaXJlaG9zZSBhcmUgcmVqZWN0ZWQpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmdHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtZmlmby10b3BpY3MuaHRtbFxcXCJcXG5cXG5fcGZfc25zZnRwX2ZpeCA6PSBcXFwiU3Vic2NyaWJlIGFuIFNRUyBxdWV1ZSAoRklGTyBvciBzdGFuZGFyZCkgdG8gdGhlIEZJRk8gdG9waWMsIG9yIHVzZSBhIHN0YW5kYXJkIHRvcGljIGZvciBvdGhlciBwcm90b2NvbHNcXFwiXFxuXFxuX3BmX3Nuc2Z0cF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmdHBfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zZnRwX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbiMgdG9waWMgaXMgRklGTzogYW4gaW4tdGVtcGxhdGUgdG9waWMgd2l0aCBGaWZvVG9waWMgdHJ1ZSwgb3IgYSBsaXRlcmFsIEFSTiBlbmRpbmcgaW4gLmZpZm9cXG5fcGZfc25zZnRwX3RmaWZvKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Z0cF90Zmlmbyh0KSBpZiB7XFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxuX3BmX3Nuc2Z0cF90c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1t0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvVG9waWNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmdHBfdHN0ZCh0KSBpZiB7XFxuXFx0dCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRyZXNvbHZlKHQsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Z0cF90c3RkKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRub3QgZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby10b3BpYy1wcm90b2NvbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcImEgRklGTyB0b3BpYyBpcyBzdWJzY3JpYmVkIHdpdGggcHJvdG9jb2wgJXM7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEludmFsaWQgcHJvdG9jb2wgdHlwZTogJXNcXFxcXFxcIlxcXCIsIFtwcm90bywgcHJvdG9dKSxcXG5cXHRfcGZfc25zZnRwX2ZpeCwgX3BmX3Nuc2Z0cF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIHRvcGljXSBpbiBfcGZfc25zZnRwX3N1YlxcblxcdF9wZl9zbnNmdHBfdGZpZm8odG9waWMpXFxuXFx0cHJvdG8gOj0gX3BmX3Nuc2Z0cF9wcm90byhuYW1lLCBwYXRoKVxcblxcdHByb3RvICE9IFxcXCJzcXNcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpbHRlci1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmlsdGVyUG9saWN5IHNoYXBlOiBhdCBtb3N0IDUga2V5cywgZXZlcnkgdmFsdWUgYW4gYXJyYXkgb3Igb2JqZWN0LCBubyBlbXB0eSBhcnJheXMsIG5vIGFycmF5cyBpbnNpZGUgYXJyYXlzLCBuZXN0aW5nIG9ubHkgd2l0aCBGaWx0ZXJQb2xpY3lTY29wZSBNZXNzYWdlQm9keSwgYW5kIEZpbHRlclBvbGljeVNjb3BlIGlzIE1lc3NhZ2VBdHRyaWJ1dGVzIG9yIE1lc3NhZ2VCb2R5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1zdWJzY3JpcHRpb24tZmlsdGVyLXBvbGljaWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZwX2ZpeCA6PSBcXFwiS2VlcCB0aGUgZmlsdGVyIHBvbGljeSB0byA1IGtleXMgb2Ygbm9uLWVtcHR5IGFycmF5cyAob3IgbmVzdGVkIG9iamVjdHMgd2l0aCBGaWx0ZXJQb2xpY3lTY29wZTogTWVzc2FnZUJvZHkpXFxcIlxcblxcbl9wZl9zbnNmcF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmcF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmcF9wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG5fcGZfc25zZnBfcG9sKHN1YikgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChzdWIsIFxcXCJGaWx0ZXJQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNmcF9wb2woc3ViKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHN1YiwgXFxcIkZpbHRlclBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNmcF9lcnIgOj0gXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogRmlsdGVyUG9saWN5OiBcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kgaGFzICVkIGtleXMgKG1heGltdW0gNSk7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNGaWx0ZXIgcG9saWN5IGNhbiBub3QgaGF2ZSBtb3JlIHRoYW4gNSBrZXlzXFxcXFxcXCJcXFwiLCBbbiwgX3BmX3Nuc2ZwX2Vycl0pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRuIDo9IGNvdW50KG9iamVjdC5rZXlzKF9wZl9zbnNmcF9wb2woc3ViKSkpXFxuXFx0biA+IDVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5LiVzXFxcIiwgW3BhdGgsIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kga2V5ICclcycgaGFzIGEgc2NhbGFyIHZhbHVlOyBlYWNoIGtleSB0YWtlcyBhbiBhcnJheSBvZiBtYXRjaCB2YWx1ZXMgKG9yIGFuIG9iamVjdCB3aXRoIEZpbHRlclBvbGljeVNjb3BlIE1lc3NhZ2VCb2R5KSwgYW5kIFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5XFxcXFxcXCJcXFwiLCBbaywgX3BmX3Nuc2ZwX2Vyciwga10pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRzb21lIGssIHYgaW4gX3BmX3Nuc2ZwX3BvbChzdWIpXFxuXFx0bm90IGlzX2FycmF5KHYpXFxuXFx0bm90IGlzX29iamVjdCh2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBpcyBhbiBlbXB0eSBhcnJheTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc0VtcHR5IGFycmF5cyBhcmUgbm90IGFsbG93ZWRcXFxcXFxcIlxcXCIsIFtrLCBfcGZfc25zZnBfZXJyXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdHNvbWUgaywgdiBpbiBfcGZfc25zZnBfcG9sKHN1YilcXG5cXHRpc19hcnJheSh2KVxcblxcdGNvdW50KHYpID09IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5LiVzXFxcIiwgW3BhdGgsIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kga2V5ICclcycgaGFzIGFuIGFycmF5IGluc2lkZSBpdHMgYXJyYXk7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNNYXRjaCB2YWx1ZSBtdXN0IGJlIFN0cmluZywgbnVtYmVyLCB0cnVlLCBmYWxzZSwgb3IgbnVsbFxcXFxcXFwiXFxcIiwgW2ssIF9wZl9zbnNmcF9lcnJdKSxcXG5cXHRfcGZfc25zZnBfZml4LCBfcGZfc25zZnBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZnBfc3ViXFxuXFx0c29tZSBrLCB2IGluIF9wZl9zbnNmcF9wb2woc3ViKVxcblxcdGlzX2FycmF5KHYpXFxuXFx0c29tZSBlIGluIHZcXG5cXHRpc19hcnJheShlKVxcbn1cXG5cXG5fcGZfc25zZnBfYXR0cl9zY29wZShzdWIpIGlmIG9iamVjdC5nZXQoc3ViLCBcXFwiRmlsdGVyUG9saWN5U2NvcGVcXFwiLCBcXFwiTWVzc2FnZUF0dHJpYnV0ZXNcXFwiKSA9PSBcXFwiTWVzc2FnZUF0dHJpYnV0ZXNcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5LiVzXFxcIiwgW3BhdGgsIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kga2V5ICclcycgbmVzdHMgYW4gb2JqZWN0IHdoaWxlIEZpbHRlclBvbGljeVNjb3BlIGlzIE1lc3NhZ2VBdHRyaWJ1dGVzOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogRmlsdGVyIHBvbGljeSBzY29wZSBNZXNzYWdlQXR0cmlidXRlcyBkb2VzIG5vdCBzdXBwb3J0IG5lc3RlZCBmaWx0ZXIgcG9saWN5XFxcXFxcXCJcXFwiLCBba10pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRfcGZfc25zZnBfYXR0cl9zY29wZShzdWIpXFxuXFx0c29tZSBrLCB2IGluIF9wZl9zbnNmcF9wb2woc3ViKVxcblxcdGlzX29iamVjdCh2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3lTY29wZVxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiRmlsdGVyUG9saWN5U2NvcGUgJyVzJyBpcyBub3QgTWVzc2FnZUF0dHJpYnV0ZXMgb3IgTWVzc2FnZUJvZHk7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBGaWx0ZXJQb2xpY3lTY29wZTogSW52YWxpZCB2YWx1ZSBbJXNdLiBQbGVhc2UgdXNlIGVpdGhlciBNZXNzYWdlQm9keSBvciBNZXNzYWdlQXR0cmlidXRlc1xcXFxcXFwiXFxcIiwgW3MsIHNdKSxcXG5cXHRfcGZfc25zZnBfZml4LCBfcGZfc25zZnBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZnBfc3ViXFxuXFx0cyA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLkZpbHRlclBvbGljeVNjb3BlXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocylcXG5cXHRub3QgcyBpbiB7XFxcIk1lc3NhZ2VBdHRyaWJ1dGVzXFxcIiwgXFxcIk1lc3NhZ2VCb2R5XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlyZWhvc2Utc3Vic2NyaXB0aW9uLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBmaXJlaG9zZSBzdWJzY3JpcHRpb24gcmVxdWlyZXMgU3Vic2NyaXB0aW9uUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZmhfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9hcGkvQVBJX1N1YnNjcmliZS5odG1sXFxcIlxcblxcbl9wZl9zbnNmaF9maXggOj0gXFxcIlNldCBTdWJzY3JpcHRpb25Sb2xlQXJuIHRvIGEgcm9sZSBTTlMgY2FuIGFzc3VtZSB0aGF0IG1heSB3cml0ZSB0byB0aGUgZGVsaXZlcnkgc3RyZWFtXFxcIlxcblxcbl9wZl9zbnNmaF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmaF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmaF9wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maXJlaG9zZS1zdWJzY3JpcHRpb24tcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3Vic2NyaXB0aW9uUm9sZUFyblxcXCIsIFtwYXRoXSksXFxuXFx0XFxcIlByb3RvY29sIGZpcmVob3NlIGhhcyBubyBTdWJzY3JpcHRpb25Sb2xlQXJuOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBEZWxpdmVyeSBwcm90b2NvbCBmaXJlaG9zZSBjYW4gb25seSBiZSBzdWJzY3JpYmVkIHdpdGggc3Vic2NyaXB0aW9uIHJvbGUgYXJuXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zbnNmaF9maXgsIF9wZl9zbnNmaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmaF9zdWJcXG5cXHRfcGZfc25zZmhfcHJvdG8obmFtZSwgcGF0aCkgPT0gXFxcImZpcmVob3NlXFxcIlxcblxcdG9iamVjdC5nZXQoc3ViLCBcXFwiU3Vic2NyaXB0aW9uUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtcmF3LW1lc3NhZ2UtZGVsaXZlcnlcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmF3TWVzc2FnZURlbGl2ZXJ5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBzcXMsIGh0dHAsIGh0dHBzIGFuZCBmaXJlaG9zZSBzdWJzY3JpcHRpb25zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNyYXdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9hcGkvQVBJX1N1YnNjcmliZS5odG1sXFxcIlxcblxcbl9wZl9zbnNyYXdfZml4IDo9IFxcXCJEcm9wIFJhd01lc3NhZ2VEZWxpdmVyeSBmb3IgZW1haWwgLyBlbWFpbC1qc29uIC8gc21zIC8gbGFtYmRhIC8gYXBwbGljYXRpb24gc3Vic2NyaXB0aW9uc1xcXCJcXG5cXG5fcGZfc25zcmF3X3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc3Jhd19zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNyYXdfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtcmF3LW1lc3NhZ2UtZGVsaXZlcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJhd01lc3NhZ2VEZWxpdmVyeVxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiUmF3TWVzc2FnZURlbGl2ZXJ5IGlzIHRydWUgb24gYSAlcyBzdWJzY3JpcHRpb247IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBEZWxpdmVyeSBwcm90b2NvbCBbJXNdIGRvZXMgbm90IHN1cHBvcnQgcmF3IG1lc3NhZ2UgZGVsaXZlcnkuXFxcXFxcXCJcXFwiLCBbcHJvdG8sIHByb3RvXSksXFxuXFx0X3BmX3Nuc3Jhd19maXgsIF9wZl9zbnNyYXdfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zcmF3X3N1YlxcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUmF3TWVzc2FnZURlbGl2ZXJ5XFxcIiwgW3BhdGhdKSkgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXHRwcm90byA6PSBfcGZfc25zcmF3X3Byb3RvKG5hbWUsIHBhdGgpXFxuXFx0bm90IHByb3RvIGluIHtcXFwic3FzXFxcIiwgXFxcImh0dHBcXFwiLCBcXFwiaHR0cHNcXFwiLCBcXFwiZmlyZWhvc2VcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1zdWJzY3JpcHRpb24tZW5kcG9pbnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3Vic2NyaXB0aW9uIFByb3RvY29sIGlzIG9uZSBvZiB0aGUgbmluZSBTTlMgcHJvdG9jb2xzIGFuZCB0aGUgRW5kcG9pbnQgbWF0Y2hlcyBpdDogYW4gQVJOIG9mIHRoZSByaWdodCBzZXJ2aWNlIGZvciBzcXMvbGFtYmRhL2ZpcmVob3NlL2FwcGxpY2F0aW9uLCBhbiBlbWFpbCBhZGRyZXNzLCBhIFVSTCB3aXRoIHRoZSBzYW1lIHNjaGVtZSBmb3IgaHR0cC9odHRwcywgYSBwaG9uZSBudW1iZXIgZm9yIHNtc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9hcGkvQVBJX1N1YnNjcmliZS5odG1sXFxcIlxcblxcbl9wZl9zbnNlcF9maXggOj0gXFxcIkdpdmUgdGhlIHN1YnNjcmlwdGlvbiB0aGUgZW5kcG9pbnQgZm9ybSBpdHMgcHJvdG9jb2wgZXhwZWN0cyAoRm46OkdldEF0dCBRdWV1ZS5Bcm4gZm9yIHNxcywgaHR0cHM6Ly8gVVJMIGZvciBodHRwcywgLi4uKVxcXCJcXG5cXG5fcGZfc25zZXBfc3ViIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllc1xcXCIsIHN1YiwgdG9waWNdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChzdWIpXFxuXFx0dG9waWMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY0FyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHRvcGljKVxcbn1cXG5cXG5fcGZfc25zZXBfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zZXBfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuX3BmX3Nuc2VwX3Byb3RvY29scyA6PSB7XFxcImh0dHBcXFwiLCBcXFwiaHR0cHNcXFwiLCBcXFwiZW1haWxcXFwiLCBcXFwiZW1haWwtanNvblxcXCIsIFxcXCJzbXNcXFwiLCBcXFwic3FzXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIiwgXFxcImxhbWJkYVxcXCIsIFxcXCJmaXJlaG9zZVxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLWVuZHBvaW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiUHJvdG9jb2wgJyVzJyBpcyBub3QgYW4gU05TIHByb3RvY29sOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBbWF6b24gU05TIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBwcm90b2NvbCBzdHJpbmc6ICVzXFxcXFxcXCJcXFwiLCBbcHJvdG8sIHByb3RvXSksXFxuXFx0X3BmX3Nuc2VwX2ZpeCwgX3BmX3Nuc2VwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2VwX3N1YlxcblxcdHByb3RvIDo9IF9wZl9zbnNlcF9wcm90byhuYW1lLCBwYXRoKVxcblxcdG5vdCBwcm90byBpbiBfcGZfc25zZXBfcHJvdG9jb2xzXFxufVxcblxcbiMgW3Byb3RvY29sLCBlbmRwb2ludCBwYXR0ZXJuLCBzZXJ2aWNlIGVycm9yXVxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcInNxc1xcXCIsIFxcXCJeYXJuOlteOl0rOnNxczpcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFNRUyBlbmRwb2ludCBBUk5cXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImxhbWJkYVxcXCIsIFxcXCJeYXJuOlteOl0rOmxhbWJkYTpcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IExhbWJkYSBlbmRwb2ludCBBUk5cXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImZpcmVob3NlXFxcIiwgXFxcIl5hcm46W146XSs6ZmlyZWhvc2U6XFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBGaXJlaG9zZSBlbmRwb2ludCBBUk5cXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImFwcGxpY2F0aW9uXFxcIiwgXFxcIl5hcm46W146XSs6c25zOlteOl0qOlteOl0qOmVuZHBvaW50L1xcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXBwbGljYXRpb24gZW5kcG9pbnQgYXJuIGludmFsaWRcXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImVtYWlsXFxcIiwgXFxcIl5bXkAgXStAW15AIF0rJFxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW1haWwgYWRkcmVzc1xcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiZW1haWwtanNvblxcXCIsIFxcXCJeW15AIF0rQFteQCBdKyRcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEVtYWlsIGFkZHJlc3NcXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImh0dHBcXFwiLCBcXFwiXmh0dHA6Ly9cXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEVuZHBvaW50IG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBwcm90b2NvbFxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiaHR0cHNcXFwiLCBcXFwiXmh0dHBzOi8vXFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBFbmRwb2ludCBtdXN0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcHJvdG9jb2xcXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcInNtc1xcXCIsIFxcXCJeWytdP1swLTldWzAtOSAtXSokXFxcIiwgXFxcIkludmFsaWQgU01TIGVuZHBvaW50XFxcIl1cXG5cXG4jIE9ubHkgbGl0ZXJhbCBlbmRwb2ludHMgYXJlIGp1ZGdlZDogYSBSZWYgLyBGbjo6R2V0QXR0IHRvIGEgcmVzb3VyY2UgaW4gdGhlXFxuIyB0ZW1wbGF0ZSByZXNvbHZlcyB0byB0aGF0IHJlc291cmNlJ3MgbG9naWNhbCBJRCBhbmQgaXMgc2tpcHBlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tZW5kcG9pbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkVuZHBvaW50XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFbmRwb2ludCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlIGZvcm0gdGhlICVzIHByb3RvY29sIGV4cGVjdHM7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNcXFxcXFxcIlxcXCIsIFtlcCwgcHJvdG8sIGVycl0pLFxcblxcdF9wZl9zbnNlcF9maXgsIF9wZl9zbnNlcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNlcF9zdWJcXG5cXHRwcm90byA6PSBfcGZfc25zZXBfcHJvdG8obmFtZSwgcGF0aClcXG5cXHRzb21lIFtwMiwgcGF0dGVybiwgZXJyXSBpbiBfcGZfc25zZXBfc2hhcGVcXG5cXHRwMiA9PSBwcm90b1xcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhlcClcXG5cXHRub3QgZXAgaW4gb2JqZWN0LmtleXMoaW5wdXQucmVzb3VyY2VzKVxcblxcdG5vdCBjb250YWlucyhlcCwgXFxcIiR7XFxcIilcXG5cXHRub3QgcmVnZXgubWF0Y2gocGF0dGVybiwgZXApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN1YnNjcmlwdGlvbiBSZWRyaXZlUG9saWN5IG5lZWRzIGRlYWRMZXR0ZXJUYXJnZXRBcm4sIHdoaWNoIG11c3QgYmUgYW4gU1FTIHF1ZXVlIEFSTiBpbiB0aGUgZGVwbG95IHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zc3JkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWRlYWQtbGV0dGVyLXF1ZXVlcy5odG1sXFxcIlxcblxcbl9wZl9zbnNzcmRfZml4IDo9IFxcXCJTZXQgZGVhZExldHRlclRhcmdldEFybiB0byBGbjo6R2V0QXR0IFF1ZXVlLkFybiBvZiBhIHF1ZXVlIGluIHRoaXMgc3RhY2tcXFwiXFxuXFxuX3BmX3Nuc3NyZF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNzcmRfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zc3JkX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbl9wZl9zbnNzcmRfcG9sKHN1YikgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChzdWIsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc25zc3JkX3BvbChzdWIpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoc3ViLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZWRyaXZlUG9saWN5XFxcIiwgW3BhdGhdKSxcXG5cXHRcXFwiUmVkcml2ZVBvbGljeSBoYXMgbm8gZGVhZExldHRlclRhcmdldEFybjsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFJlZHJpdmVQb2xpY3k6IE1pc3NpbmcgZGVhZExldHRlclRhcmdldEFybiBhdHRyaWJ1dGVcXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nuc3NyZF9maXgsIF9wZl9zbnNzcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zc3JkX3N1YlxcblxcdHBvbCA6PSBfcGZfc25zc3JkX3BvbChzdWIpXFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tcmVkcml2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmVkcml2ZVBvbGljeS5kZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuICclcycgaXMgbm90IGFuIFNRUyBxdWV1ZSBBUk47IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBSZWRyaXZlUG9saWN5OiBkZWFkTGV0dGVyVGFyZ2V0QXJuIG11c3QgYmUgYSBTUVMgcXVldWVcXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc25zc3JkX2ZpeCwgX3BmX3Nuc3NyZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNzcmRfc3ViXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoX3BmX3Nuc3NyZF9wb2woc3ViKSwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0bm90IGNvbnRhaW5zKGFybiwgXFxcIiR7XFxcIilcXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3FzOlxcXCIsIGFybilcXG59XFxuXFxuIyBSZWdpb24gY29tcGFyaXNvbiBuZWVkcyB0aGUgZGVwbG95IHJlZ2lvbiAoZW5mb3JjZSBtb2RlIG9ubHk7IHNlZSBBR0VOVFMubWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gaXMgaW4gJyVzJyBidXQgdGhlIHN1YnNjcmlwdGlvbiBkZXBsb3lzIHRvICclcyc7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBSZWRyaXZlUG9saWN5OiBkZWFkTGV0dGVyVGFyZ2V0QXJuIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBzdWJzY3JpcHRpb25cXFxcXFxcIlxcXCIsIFtwYXJ0c1szXSwgcmVnaW9uXSksXFxuXFx0X3BmX3Nuc3NyZF9maXgsIF9wZl9zbnNzcmRfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zc3JkX3N1YlxcblxcdGFybiA6PSBvYmplY3QuZ2V0KF9wZl9zbnNzcmRfcG9sKHN1YiksIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcInNxc1xcXCJcXG5cXHRwYXJ0c1szXSAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJzY3JpcHRpb24uUmVnaW9uIG11c3QgYmUgdGhlIHRvcGljJ3MgcmVnaW9uICh0aGUgcmVnaW9uIGluIGEgbGl0ZXJhbCBUb3BpY0Fybiwgb3IgdGhlIGRlcGxveSByZWdpb24gZm9yIGEgdG9waWMgaW4gdGhpcyB0ZW1wbGF0ZSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zc3JnX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utc25zLXN1YnNjcmlwdGlvbi5odG1sXFxcIlxcblxcbl9wZl9zbnNzcmdfZml4IDo9IFxcXCJTZXQgUmVnaW9uIHRvIHRoZSB0b3BpYydzIG93biByZWdpb24sIG9yIGRyb3AgaXQgZm9yIGEgdG9waWMgaW4gdGhpcyBzdGFja1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWdpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZ2lvbiAnJXMnIGRpZmZlcnMgZnJvbSB0aGUgdG9waWMncyByZWdpb24gJyVzJyBpbiBUb3BpY0FybjsgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpY0FyblxcXFxcXFwiXFxcIiwgW3JlZywgcGFydHNbM11dKSxcXG5cXHRfcGZfc25zc3JnX2ZpeCwgX3BmX3Nuc3NyZ191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHJlZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlZ2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlZylcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0KVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KHQsIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzNdICE9IHJlZ1xcbn1cXG5cXG4jIEEgdG9waWMgY3JlYXRlZCBpbiB0aGlzIHRlbXBsYXRlIGxpdmVzIGluIHRoZSBkZXBsb3kgcmVnaW9uIChlbmZvcmNlIG1vZGUgb25seTsgc2VlIEFHRU5UUy5tZCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVnaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZWdpb24gJyVzJyBkaWZmZXJzIGZyb20gdGhlIGRlcGxveSByZWdpb24gJyVzJyBvZiB0aGUgdG9waWMgaW4gdGhpcyB0ZW1wbGF0ZTsgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpY0FyblxcXFxcXFwiXFxcIiwgW3JlZywgcmVnaW9uXSksXFxuXFx0X3BmX3Nuc3NyZ19maXgsIF9wZl9zbnNzcmdfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRyZWcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZWdpb25cXFwiKVxcblxcdGlzX3N0cmluZyhyZWcpXFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlZyAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtdG9waWMtYXR0cmlidXRlLXZhbHVlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb3BpYyBEaXNwbGF5TmFtZSBpcyBhdCBtb3N0IDEwMCBjaGFyYWN0ZXJzLCBTaWduYXR1cmVWZXJzaW9uIGlzIDEgb3IgMiwgYW5kIFRyYWNpbmdDb25maWcgaXMgUGFzc1Rocm91Z2ggb3IgQWN0aXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zdGF2X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utc25zLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3Rhdl9maXggOj0gXFxcIlNob3J0ZW4gRGlzcGxheU5hbWUgdG8gMTAwIGNoYXJhY3RlcnM7IHVzZSBTaWduYXR1cmVWZXJzaW9uIFxcXFxcXFwiMVxcXFxcXFwiL1xcXFxcXFwiMlxcXFxcXFwiIGFuZCBUcmFjaW5nQ29uZmlnIFBhc3NUaHJvdWdoL0FjdGl2ZVxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EaXNwbGF5TmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGlzcGxheU5hbWUgaXMgJWQgY2hhcmFjdGVycyBsb25nIChtYXhpbXVtIDEwMCk7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IERpc3BsYXlOYW1lXFxcXFxcXCJcXFwiLCBbY291bnQodildKSxcXG5cXHRfcGZfc25zdGF2X2ZpeCwgX3BmX3Nuc3Rhdl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3BsYXlOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRjb3VudCh2KSA+IDEwMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TaWduYXR1cmVWZXJzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaWduYXR1cmVWZXJzaW9uICcldicgaXMgbm90IDEgb3IgMjsgQ3JlYXRlVG9waWMgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogU2lnbmF0dXJlVmVyc2lvbjogSW52YWxpZCB2YWx1ZS4gTXVzdCBiZSAxIG9yIDIuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdF9wZl9zbnN0YXZfZml4LCBfcGZfc25zdGF2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2lnbmF0dXJlVmVyc2lvblxcXCIpXFxuXFx0X3BmX3Nuc3Rhdl9zY2FsYXIodilcXG5cXHRub3Qgc3ByaW50ZihcXFwiJXZcXFwiLCBbdl0pIGluIHtcXFwiMVxcXCIsIFxcXCIyXFxcIn1cXG59XFxuXFxuX3BmX3Nuc3Rhdl9zY2FsYXIodikgaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX3Nuc3Rhdl9zY2FsYXIodikgaWYgaXNfbnVtYmVyKHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtdG9waWMtYXR0cmlidXRlLXZhbHVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHJhY2luZ0NvbmZpZ1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHJhY2luZ0NvbmZpZyAnJXMnIGlzIG5vdCBQYXNzVGhyb3VnaCBvciBBY3RpdmU7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IEludmFsaWQgdHJhY2luZyBjb25maWcgdmFsdWU6ICVzXFxcXFxcXCJcXFwiLCBbdiwgdl0pLFxcblxcdF9wZl9zbnN0YXZfZml4LCBfcGZfc25zdGF2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHJhY2luZ0NvbmZpZ1xcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHYgaW4ge1xcXCJQYXNzVGhyb3VnaFxcXCIsIFxcXCJBY3RpdmVcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy10b3BpYy1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb3BpYyBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAocGx1cyBhIC5maWZvIHN1ZmZpeClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDI1Nn0kYCwgbilcXG5cXG5fcGZfc25zbmFtZV9vayhuKSBpZiByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTF9XFxcXC5maWZvJGAsIG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtdG9waWMtbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpYyBOYW1lXFxcXFxcXCI6IFNOUyBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChhIEZJRk8gdG9waWMgYWRkcyB0aGUgLmZpZm8gc3VmZml4KVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdG9waWMgdXNpbmcgW2EtekEtWjAtOV8tXSAoYXBwZW5kIC5maWZvIG9ubHkgZm9yIEZJRk8gdG9waWNzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlVG9waWMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IF9wZl9zbnNuYW1lX29rKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXRvcGljLXBvbGljeS10b3BpY3NcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVG9waWNQb2xpY3kuVG9waWNzIHRha2VzIHRvcGljIEFSTnMgKFJlZiBUb3BpYyksIG5vdCB0b3BpYyBuYW1lc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc3RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utc25zLXRvcGljcG9saWN5Lmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3RwX2ZpeCA6PSBcXFwiTGlzdCB0b3BpY3Mgd2l0aCBSZWYgKHRoZSBBUk4pLCBub3QgRm46OkdldEF0dCBUb3BpYy5Ub3BpY05hbWUgb3IgYSBiYXJlIG5hbWVcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtdG9waWMtcG9saWN5LXRvcGljc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub3BpY3MuJWRcXFwiLCBbaV0pLFxcblxcdFxcXCJUb3BpY3MgZW50cnkgaXMgdGhlIHRvcGljIG5hbWUgKEZuOjpHZXRBdHQgVG9waWMuVG9waWNOYW1lKSBidXQgVG9waWNQb2xpY3kgZXhwZWN0cyB0aGUgdG9waWMgQVJOOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuIFJlYXNvbjogQW4gQVJOIG11c3QgaGF2ZSBhdCBsZWFzdCA2IGVsZW1lbnRzLCBub3QgMVxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc25zdHBfZml4LCBfcGZfc25zdHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcXFwiKVxcblxcdHRzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJUb3BpY3NcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHRzKVxcblxcdHNvbWUgaSwgdCBpbiB0c1xcblxcdGlzX29iamVjdCh0KVxcblxcdG9iamVjdC5nZXQodCwgXFxcIl9fa2luZFxcXCIsIG51bGwpID09IFxcXCJnZXRhdHQ6VG9waWNOYW1lXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1wb2xpY3ktdG9waWNzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRvcGljcy4lZFxcXCIsIFtpXSksXFxuXFx0c3ByaW50ZihcXFwiVG9waWNzIGVudHJ5ICclcycgaXMgbm90IGFuIEFSTjsgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpY0FybiBSZWFzb246IEFuIEFSTiBtdXN0IGhhdmUgYXQgbGVhc3QgNiBlbGVtZW50c1xcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRfcGZfc25zdHBfZml4LCBfcGZfc25zdHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcXFwiKVxcblxcdHRzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJUb3BpY3NcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHRzKVxcblxcdHNvbWUgaSwgdCBpbiB0c1xcblxcdGlzX3N0cmluZyh0KVxcblxcdG5vdCBzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRub3QgY29udGFpbnModCwgXFxcIiR7XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtZGxxLXNhbWUtdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRlYWQtbGV0dGVyIHF1ZXVlIG5hbWVkIGJ5IGEgbGl0ZXJhbCBBUk4gbXVzdCBiZSB0aGUgc2FtZSB0eXBlIGFzIGl0cyBzb3VyY2UgKEZJRk8gZm9yIEZJRk8sIHN0YW5kYXJkIGZvciBzdGFuZGFyZCk7IEZuOjpHZXRBdHQgd2lyaW5nIGlzIGNvdmVyZWQgYnkgZW5naW5lIHJ1bGUgRTM1MDJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNkbHFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc2RscV9maXggOj0gXFxcIlBvaW50IGEgRklGTyBxdWV1ZSBhdCBhIEZJRk8gZGVhZC1sZXR0ZXIgcXVldWUgKCouZmlmbykgYW5kIGEgc3RhbmRhcmQgcXVldWUgYXQgYSBzdGFuZGFyZCBvbmVcXFwiXFxuXFxuX3BmX3Nxc2RscV9maWZvKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIFN0YW5kYXJkIHF1ZXVlOiBGaWZvUXVldWUgYWJzZW50IG9yIGxpdGVyYWxseSBmYWxzZSAoYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGlzIG5laXRoZXIpLlxcbl9wZl9zcXNkbHFfc3RkKHEpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbcV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlmb1F1ZXVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc3FzZGxxX3N0ZChxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG4jIFJlZHJpdmVQb2xpY3kgYXJyaXZlcyBhcyBhIEpTT04gb2JqZWN0IG9yIGFzIGEgSlNPTiBzdHJpbmcgKGJvdGggYXJlIHZhbGlkIENsb3VkRm9ybWF0aW9uKS5cXG5fcGZfc3FzZGxxX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc2RscV9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG4jIFRoZSBlbmdpbmUncyBFMzUwMiAoQ0ZOX0xJTlQpIGFscmVhZHkgY29tcGFyZXMgdGhlIHR5cGVzIHdoZW5cXG4jIGRlYWRMZXR0ZXJUYXJnZXRBcm4gaXMgRm46OkdldEF0dCBvZiBhIHF1ZXVlIGluIHRoZSB0ZW1wbGF0ZSAodmVyaWZpZWRcXG4jIGFnYWluc3QgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTA1KS4gT25seSBhIGxpdGVyYWwgQVJOIOKAlCBhbiBpbXBvcnRlZCBxdWV1ZSDigJRcXG4jIGVzY2FwZXMgaXQsIGFuZCB0aGUgLmZpZm8gc3VmZml4IHRlbGxzIHRoZSB0eXBlLlxcbl9wZl9zcXNkbHFfbGl0ZXJhbChuYW1lKSA6PSBhcm4gaWYge1xcblxcdGFybiA6PSBvYmplY3QuZ2V0KF9wZl9zcXNkbHFfcG9sKG5hbWUpLCBcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRyZWdleC5tYXRjaChcXFwiXmFybjpbXjpdKzpzcXM6XFxcIiwgYXJuKVxcblxcdG5vdCBjb250YWlucyhhcm4sIFxcXCIke1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLWRscS1zYW1lLXR5cGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiYSBGSUZPIHF1ZXVlIHBvaW50cyBhdCB0aGUgc3RhbmRhcmQgZGVhZC1sZXR0ZXIgcXVldWUgJyVzJzsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkRlYWQtbGV0dGVyIHF1ZXVlIG11c3QgYmUgc2FtZSB0eXBlIG9mIHF1ZXVlIGFzIHRoZSBzb3VyY2UuXFxcXFxcXCJcXFwiLCBbYXJuXSksXFxuXFx0X3BmX3Nxc2RscV9maXgsIF9wZl9zcXNkbHFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdF9wZl9zcXNkbHFfZmlmbyhuYW1lKVxcblxcdGFybiA6PSBfcGZfc3FzZGxxX2xpdGVyYWwobmFtZSlcXG5cXHRub3QgZW5kc3dpdGgoYXJuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1kbHEtc2FtZS10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcImEgc3RhbmRhcmQgcXVldWUgcG9pbnRzIGF0IHRoZSBGSUZPIGRlYWQtbGV0dGVyIHF1ZXVlICclcyc7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJEZWFkLWxldHRlciBxdWV1ZSBtdXN0IGJlIHNhbWUgdHlwZSBvZiBxdWV1ZSBhcyB0aGUgc291cmNlLlxcXFxcXFwiXFxcIiwgW2Fybl0pLFxcblxcdF9wZl9zcXNkbHFfZml4LCBfcGZfc3FzZGxxX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRfcGZfc3FzZGxxX3N0ZChuYW1lKVxcblxcdGFybiA6PSBfcGZfc3FzZGxxX2xpdGVyYWwobmFtZSlcXG5cXHRlbmRzd2l0aChhcm4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLWZpZm8tbmFtZS1zdWZmaXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBRdWV1ZU5hbWUgZW5kaW5nIGluIC5maWZvIHJlcXVpcmVzIEZpZm9RdWV1ZTogdHJ1ZSAoYSBGSUZPIHF1ZXVlIHdpdGhvdXQgdGhlIHN1ZmZpeCBpcyBlbmdpbmUgcnVsZSBFMjUwNClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNzZnhfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3NmeF9maXggOj0gXFxcIlNldCBGaWZvUXVldWU6IHRydWUgb3IgZHJvcCB0aGUgLmZpZm8gc3VmZml4XFxcIlxcblxcbl9wZl9zcXNzZnhfZmlmbyhxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBTdGFuZGFyZCBxdWV1ZTogRmlmb1F1ZXVlIGFic2VudCBvciBsaXRlcmFsbHkgZmFsc2UgKGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBpcyBuZWl0aGVyKS5cXG5fcGZfc3Fzc2Z4X3N0ZChxKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3FdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9RdWV1ZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc3NmeF9zdGQocSkgaWYgcmVzb2x2ZShxLCBcXFwiUHJvcGVydGllcy5GaWZvUXVldWVcXFwiKSBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxuXFxuIyBUaGUgb3Bwb3NpdGUgZGlyZWN0aW9uIChGaWZvUXVldWUgdHJ1ZSwgbmFtZSB3aXRob3V0IC5maWZvKSBpcyB0aGUgZW5naW5lJ3NcXG4jIEUyNTA0IC8gRTM1MDE7IHZlcmlmaWVkIGFnYWluc3QgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTA1LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLWZpZm8tbmFtZS1zdWZmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUXVldWVOYW1lICclcycgZW5kcyB3aXRoIC5maWZvIGJ1dCB0aGUgcXVldWUgaXMgc3RhbmRhcmQgKEZpZm9RdWV1ZSBpcyBub3QgdHJ1ZSk7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJDYW4gb25seSBpbmNsdWRlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBvciB1bmRlcnNjb3Jlcy4gMSB0byA4MCBpbiBsZW5ndGhcXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0X3BmX3Nxc3NmeF9maXgsIF9wZl9zcXNzZnhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5RdWV1ZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGVuZHN3aXRoKG4sIFxcXCIuZmlmb1xcXCIpXFxuXFx0X3BmX3Nxc3NmeF9zdGQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGVudEJhc2VkRGVkdXBsaWNhdGlvbiwgRGVkdXBsaWNhdGlvblNjb3BlIGFuZCBGaWZvVGhyb3VnaHB1dExpbWl0IGFyZSBGSUZPLW9ubHkgcXVldWUgYXR0cmlidXRlcyAoYW5kIHRoZSB0d28gZW51bXMgYXJlIG1lc3NhZ2VHcm91cHxxdWV1ZSBhbmQgcGVyUXVldWV8cGVyTWVzc2FnZUdyb3VwSWQpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzZm9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc2ZvX2ZpeCA6PSBcXFwiU2V0IEZpZm9RdWV1ZTogdHJ1ZSAoYW5kIG5hbWUgdGhlIHF1ZXVlICouZmlmbykgb3IgZHJvcCB0aGUgRklGTy1vbmx5IGF0dHJpYnV0ZXNcXFwiXFxuXFxuX3BmX3Nxc2ZvX2ZpZm8ocSkgaWYgcmVzb2x2ZShxLCBcXFwiUHJvcGVydGllcy5GaWZvUXVldWVcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcbiMgU3RhbmRhcmQgcXVldWU6IEZpZm9RdWV1ZSBhYnNlbnQgb3IgbGl0ZXJhbGx5IGZhbHNlIChhbiB1bnJlc29sdmFibGUgdmFsdWUgaXMgbmVpdGhlcikuXFxuX3BmX3Nxc2ZvX3N0ZChxKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3FdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9RdWV1ZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc2ZvX3N0ZChxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG5fcGZfc3FzZm9fbXNnIDo9IHtcXG5cXHRcXFwiQ29udGVudEJhc2VkRGVkdXBsaWNhdGlvblxcXCI6IFxcXCJVbmtub3duIEF0dHJpYnV0ZSBDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLlxcXCIsXFxuXFx0XFxcIkRlZHVwbGljYXRpb25TY29wZVxcXCI6IFxcXCJZb3UgY2FuIHNwZWNpZnkgdGhlIERlZHVwbGljYXRpb25TY29wZSBvbmx5IHdoZW4gRmlmb1F1ZXVlIGlzIHNldCB0byB0cnVlLlxcXCIsXFxuXFx0XFxcIkZpZm9UaHJvdWdocHV0TGltaXRcXFwiOiBcXFwiWW91IGNhbiBzcGVjaWZ5IHRoZSBGaWZvVGhyb3VnaHB1dExpbWl0IG9ubHkgd2hlbiBGaWZvUXVldWUgaXMgc2V0IHRvIHRydWUuXFxcIixcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBvbiBhIHN0YW5kYXJkIHF1ZXVlIChGaWZvUXVldWUgaXMgbm90IHRydWUpOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNcXFxcXFxcIlxcXCIsIFthdHRyLCBfcGZfc3FzZm9fbXNnW2F0dHJdXSksXFxuXFx0X3BmX3Nxc2ZvX2ZpeCwgX3BmX3Nxc2ZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRfcGZfc3FzZm9fc3RkKG5hbWUpXFxuXFx0c29tZSBhdHRyLCBfIGluIF9wZl9zcXNmb19tc2dcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBhdHRyLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zcXNmb19lbnVtIGNvbnRhaW5zIFtcXFwiRGVkdXBsaWNhdGlvblNjb3BlXFxcIiwge1xcXCJtZXNzYWdlR3JvdXBcXFwiLCBcXFwicXVldWVcXFwifV1cXG5cXG5fcGZfc3FzZm9fZW51bSBjb250YWlucyBbXFxcIkZpZm9UaHJvdWdocHV0TGltaXRcXFwiLCB7XFxcInBlclF1ZXVlXFxcIiwgXFxcInBlck1lc3NhZ2VHcm91cElkXFxcIn1dXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pLFxcblxcdHNwcmludGYoXFxcIiVzICclcycgaXMgbm90IG9uZSBvZiAldjsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgJXMuIFJlYXNvbjogbm90IGEgc3VwcG9ydGVkIHZhbHVlLlxcXFxcXFwiXFxcIiwgW2F0dHIsIHYsIGFsbG93ZWQsIGF0dHJdKSxcXG5cXHRfcGZfc3FzZm9fZml4LCBfcGZfc3FzZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHNvbWUgW2F0dHIsIGFsbG93ZWRdIGluIF9wZl9zcXNmb19lbnVtXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCB2IGluIGFsbG93ZWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtaGlnaC10aHJvdWdocHV0LXBhaXJpbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmlmb1Rocm91Z2hwdXRMaW1pdCBwZXJNZXNzYWdlR3JvdXBJZCByZXF1aXJlcyBEZWR1cGxpY2F0aW9uU2NvcGUgbWVzc2FnZUdyb3VwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzaHRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9TUVNEZXZlbG9wZXJHdWlkZS9oaWdoLXRocm91Z2hwdXQtZmlmby5odG1sXFxcIlxcblxcbl9wZl9zcXNodF9maXggOj0gXFxcIlNldCBEZWR1cGxpY2F0aW9uU2NvcGU6IG1lc3NhZ2VHcm91cCB0b2dldGhlciB3aXRoIEZpZm9UaHJvdWdocHV0TGltaXQ6IHBlck1lc3NhZ2VHcm91cElkIChib3RoIGFyZSBuZWVkZWQgZm9yIGhpZ2ggdGhyb3VnaHB1dClcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtaGlnaC10aHJvdWdocHV0LXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZpZm9UaHJvdWdocHV0TGltaXRcXFwiLFxcblxcdHNwcmludGYoXFxcIkZpZm9UaHJvdWdocHV0TGltaXQgaXMgcGVyTWVzc2FnZUdyb3VwSWQgYnV0IERlZHVwbGljYXRpb25TY29wZSBpcyAlczsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgRmlmb1Rocm91Z2hwdXRMaW1pdC4gUmVhc29uOiBUbyBzZXQgRmlmb1Rocm91Z2hwdXRMaW1pdCB0byBwZXJNZXNzYWdlR3JvdXBJZCwgdGhlIERlZHVwbGljYXRpb25TY29wZSBtdXN0IGJlIG1lc3NhZ2VHcm91cC5cXFxcXFxcIlxcXCIsIFtzaG93bl0pLFxcblxcdF9wZl9zcXNodF9maXgsIF9wZl9zcXNodF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWZvVGhyb3VnaHB1dExpbWl0XFxcIikgPT0gXFxcInBlck1lc3NhZ2VHcm91cElkXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHNjb3BlIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJEZWR1cGxpY2F0aW9uU2NvcGVcXFwiLCBudWxsKVxcblxcdF9wZl9zcXNodF9iYWQoc2NvcGUpXFxuXFx0c2hvd24gOj0gX3BmX3Nxc2h0X3Nob3coc2NvcGUpXFxufVxcblxcbl9wZl9zcXNodF9iYWQoc2NvcGUpIGlmIHNjb3BlID09IG51bGxcXG5cXG5fcGZfc3FzaHRfYmFkKHNjb3BlKSBpZiB7XFxuXFx0aXNfc3RyaW5nKHNjb3BlKVxcblxcdHNjb3BlICE9IFxcXCJtZXNzYWdlR3JvdXBcXFwiXFxufVxcblxcbl9wZl9zcXNodF9zaG93KHNjb3BlKSA6PSBcXFwiYWJzZW50XFxcIiBpZiBzY29wZSA9PSBudWxsXFxuXFxuX3BmX3Nxc2h0X3Nob3coc2NvcGUpIDo9IHNwcmludGYoXFxcIiclcydcXFwiLCBbc2NvcGVdKSBpZiBpc19zdHJpbmcoc2NvcGUpXFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcXVldWUtbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUXVldWUgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKG1heCA4MCwgcGx1cyBhIC5maWZvIHN1ZmZpeClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDgwfSRgLCBuKVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDc1fVxcXFwuZmlmbyRgLCBuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXF1ZXVlLW5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5RdWV1ZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlF1ZXVlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBTUVMgYWNjZXB0cyAxLTgwIGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChhIEZJRk8gcXVldWUgYWRkcyB0aGUgLmZpZm8gc3VmZml4KVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgcXVldWUgdXNpbmcgW2EtekEtWjAtOV8tXSB3aXRoaW4gODAgY2hhcmFjdGVycyAoYXBwZW5kIC5maWZvIG9ubHkgZm9yIEZJRk8gcXVldWVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IF9wZl9zcXNuYW1lX29rKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXF1ZXVlLXBvbGljeS1xdWV1ZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUXVldWVQb2xpY3kuUXVldWVzIHRha2VzIHF1ZXVlIFVSTHMgKFJlZiBRdWV1ZSksIG5ldmVyIEFSTnMgKEZuOjpHZXRBdHQgUXVldWUuQXJuKSwgYW5kIG11c3Qgbm90IGJlIGVtcHR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzcXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zcXMtcXVldWVwb2xpY3kuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcXBfZml4IDo9IFxcXCJMaXN0IHRoZSBxdWV1ZXMgd2l0aCBSZWYgKHRoZSBxdWV1ZSBVUkwpLCBub3QgRm46OkdldEF0dCBRdWV1ZS5Bcm5cXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUXVldWVzXFxcIixcXG5cXHRcXFwiUXVldWVzIGlzIGVtcHR5OyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiUXVldWVzIGFyZSByZXF1aXJlZFxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc3FzcXBfZml4LCBfcGZfc3FzcXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcXFwiKVxcblxcdHFzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJRdWV1ZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHFzKVxcblxcdGNvdW50KHFzKSA9PSAwXFxufVxcblxcbiMgRm46OkdldEF0dCBhcHBlYXJzIGluIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgYXMgYSBtYXJrZXIgb2JqZWN0IHdob3NlXFxuIyBfX2tpbmQgbmFtZXMgdGhlIGF0dHJpYnV0ZTsgUmVmICh0aGUgVVJMKSBpcyBcXFwicmVzb3VyY2VcXFwiLiBMaXRlcmFsIEFSTnMgYXJlXFxuIyBzdHJpbmdzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXF1ZXVlLXBvbGljeS1xdWV1ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUXVldWVzLiVkXFxcIiwgW2ldKSxcXG5cXHRcXFwiUXVldWVzIGVudHJ5IGlzIHRoZSBxdWV1ZSBBUk4gKEZuOjpHZXRBdHQgUXVldWUuQXJuKSBidXQgUXVldWVQb2xpY3kgZXhwZWN0cyB0aGUgcXVldWUgVVJMOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGFkZHJlc3MgYXJuOmF3czpzcXM6Li4uIGlzIG5vdCB2YWxpZCBmb3IgdGhpcyBlbmRwb2ludC5cXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nxc3FwX2ZpeCwgX3BmX3Nxc3FwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlUG9saWN5XFxcIilcXG5cXHRxcyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUXVldWVzXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShxcylcXG5cXHRzb21lIGksIHEgaW4gcXNcXG5cXHRpc19vYmplY3QocSlcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJfX2tpbmRcXFwiLCBudWxsKSA9PSBcXFwiZ2V0YXR0OkFyblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5RdWV1ZXMuJWRcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIlF1ZXVlcyBlbnRyeSAnJXMnIGlzIGFuIEFSTiBidXQgUXVldWVQb2xpY3kgZXhwZWN0cyB0aGUgcXVldWUgVVJMIChodHRwczovL3Nxcy48cmVnaW9uPi5hbWF6b25hd3MuY29tLzxhY2NvdW50Pi88bmFtZT4pOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGFkZHJlc3MgLi4uIGlzIG5vdCB2YWxpZCBmb3IgdGhpcyBlbmRwb2ludC5cXFxcXFxcIlxcXCIsIFtxXSksXFxuXFx0X3BmX3Nxc3FwX2ZpeCwgX3BmX3Nxc3FwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlUG9saWN5XFxcIilcXG5cXHRxcyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUXVldWVzXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShxcylcXG5cXHRzb21lIGksIHEgaW4gcXNcXG5cXHRpc19zdHJpbmcocSlcXG5cXHRzdGFydHN3aXRoKHEsIFxcXCJhcm46XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcmVkcml2ZS1hbGxvdy1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkcml2ZUFsbG93UG9saWN5OiByZWRyaXZlUGVybWlzc2lvbiBpcyByZXF1aXJlZCAoYWxsb3dBbGx8ZGVueUFsbHxieVF1ZXVlKTsgYnlRdWV1ZSBuZWVkcyAxLi4xMCBzb3VyY2VRdWV1ZUFybnMgYW5kIHRoZSBvdGhlciB0d28gZm9yYmlkIHRoZW1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNyYXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3JhcF9maXggOj0gXFxcIlVzZSBieVF1ZXVlIHdpdGggMS0xMCBzb3VyY2VRdWV1ZUFybnMsIG9yIGFsbG93QWxsIC8gZGVueUFsbCB3aXRob3V0IHNvdXJjZVF1ZXVlQXJuc1xcXCJcXG5cXG4jIFJlZHJpdmVBbGxvd1BvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNyYXBfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNyYXBfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcmFwX21zZyA6PSBcXFwiQW1hem9uIFNRUyBjYW4ndCBjcmVhdGUgdGhlIHJlZHJpdmUgYWxsb3cgcG9saWN5XFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYWxsb3ctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kucmVkcml2ZVBlcm1pc3Npb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZHJpdmVBbGxvd1BvbGljeSBoYXMgbm8gcmVkcml2ZVBlcm1pc3Npb247IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCIlcywgYXMgaXQncyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQuXFxcXFxcXCJcXFwiLCBbX3BmX3Nxc3JhcF9tc2ddKSxcXG5cXHRfcGZfc3FzcmFwX2ZpeCwgX3BmX3Nxc3JhcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNyYXBfcG9sKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJyZWRyaXZlUGVybWlzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hbGxvdy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVBbGxvd1BvbGljeS5yZWRyaXZlUGVybWlzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwicmVkcml2ZVBlcm1pc3Npb24gJyVzJyBpcyBub3QgYWxsb3dBbGwsIGRlbnlBbGwgb3IgYnlRdWV1ZTsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLCBhcyBpdCdzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdC5cXFxcXFxcIlxcXCIsIFtwZXJtLCBfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwZXJtIDo9IG9iamVjdC5nZXQoX3BmX3Nxc3JhcF9wb2wobmFtZSksIFxcXCJyZWRyaXZlUGVybWlzc2lvblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHBlcm0pXFxuXFx0bm90IHBlcm0gaW4ge1xcXCJhbGxvd0FsbFxcXCIsIFxcXCJkZW55QWxsXFxcIiwgXFxcImJ5UXVldWVcXFwifVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZUFsbG93UG9saWN5LnNvdXJjZVF1ZXVlQXJuc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwicmVkcml2ZVBlcm1pc3Npb24gYnlRdWV1ZSBoYXMgJWQgc291cmNlUXVldWVBcm5zICgxIHRvIDEwIHJlcXVpcmVkKTsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLiBXaGVuIHlvdSBzcGVjaWZ5IHRoZSBieVF1ZXVlIHBlcm1pc3Npb24gdHlwZSwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGJldHdlZW4gMSBhbmQgMTAgc291cmNlIHF1ZXVlIEFSTnMuXFxcXFxcXCJcXFwiLCBbbiwgX3BmX3Nxc3JhcF9tc2ddKSxcXG5cXHRfcGZfc3FzcmFwX2ZpeCwgX3BmX3Nxc3JhcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNyYXBfcG9sKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJyZWRyaXZlUGVybWlzc2lvblxcXCIsIG51bGwpID09IFxcXCJieVF1ZXVlXFxcIlxcblxcdG4gOj0gX3BmX3Nxc3JhcF9jb3VudChvYmplY3QuZ2V0KHBvbCwgXFxcInNvdXJjZVF1ZXVlQXJuc1xcXCIsIG51bGwpKVxcblxcdF9wZl9zcXNyYXBfb3V0KG4pXFxufVxcblxcbl9wZl9zcXNyYXBfY291bnQodikgOj0gMCBpZiB2ID09IG51bGxcXG5cXG5fcGZfc3FzcmFwX2NvdW50KHYpIDo9IGNvdW50KHYpIGlmIGlzX2FycmF5KHYpXFxuXFxuX3BmX3Nxc3JhcF9vdXQobikgaWYgbiA8IDFcXG5cXG5fcGZfc3FzcmFwX291dChuKSBpZiBuID4gMTBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZUFsbG93UG9saWN5LnNvdXJjZVF1ZXVlQXJuc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwicmVkcml2ZVBlcm1pc3Npb24gJXMgZG9lcyBub3QgdGFrZSBzb3VyY2VRdWV1ZUFybnM7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCIlcy4gWW91IGNhbiBzcGVjaWZ5IHNvdXJjZSBxdWV1ZSBBUk5zIG9ubHkgd2hlbiB0aGUgcGVybWlzc2lvbiB0eXBlIGlzIGJ5UXVldWUuXFxcXFxcXCJcXFwiLCBbcGVybSwgX3BmX3Nxc3JhcF9tc2ddKSxcXG5cXHRfcGZfc3FzcmFwX2ZpeCwgX3BmX3Nxc3JhcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNyYXBfcG9sKG5hbWUpXFxuXFx0cGVybSA6PSBvYmplY3QuZ2V0KHBvbCwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgbnVsbClcXG5cXHRwZXJtIGluIHtcXFwiYWxsb3dBbGxcXFwiLCBcXFwiZGVueUFsbFxcXCJ9XFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJzb3VyY2VRdWV1ZUFybnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXJlZHJpdmUtYXJuLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgZGVhZC1sZXR0ZXIgdGFyZ2V0IGFuZCBldmVyeSBSZWRyaXZlQWxsb3dQb2xpY3kgc291cmNlIHF1ZXVlIG11c3Qgc2l0IGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzcnJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9TUVNEZXZlbG9wZXJHdWlkZS9zcXMtZGVhZC1sZXR0ZXItcXVldWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3JyX2ZpeCA6PSBcXFwiUmVmZXJlbmNlIHF1ZXVlcyBpbiB0aGUgc2FtZSByZWdpb24gKEZuOjpHZXRBdHQgUXVldWUuQXJuIG9mIHF1ZXVlcyBpbiB0aGlzIHN0YWNrKVxcXCJcXG5cXG4jIFJlZHJpdmVQb2xpY3kgYXJyaXZlcyBhcyBhIEpTT04gb2JqZWN0IG9yIGFzIGEgSlNPTiBzdHJpbmcgKGJvdGggYXJlIHZhbGlkIENsb3VkRm9ybWF0aW9uKS5cXG5fcGZfc3FzcnJfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcnJfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JyX2FsbG93KG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNycl9hbGxvdyhuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZUFsbG93UG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JyX3JlZ2lvbihhcm4pIDo9IHBhcnRzWzNdIGlmIHtcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcInNxc1xcXCJcXG59XFxuXFxuIyBSZWdpb24gY29tcGFyaXNvbiBuZWVkcyB0aGUgZGVwbG95IHJlZ2lvbiwgd2hpY2ggb25seSB0aGlzIHBhY2sgc2Vlc1xcbiMgKGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgaW4gZW5mb3JjZSBtb2RlOyB0aGUgcnVsZVxcbiMgc2tpcHMgd2l0aG91dCBpdCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hcm4tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gaXMgaW4gJyVzJyBidXQgdGhlIHF1ZXVlIGRlcGxveXMgdG8gJyVzJzsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkRlYWQtbGV0dGVyIHRhcmdldCBtdXN0IGJlIGluIHNhbWUgcmVnaW9uIGFzIHRoZSBzb3VyY2UuXFxcXFxcXCJcXFwiLCBbciwgcmVnaW9uXSksXFxuXFx0X3BmX3Nxc3JyX2ZpeCwgX3BmX3Nxc3JyX3VybCkgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChfcGZfc3FzcnJfcG9sKG5hbWUpLCBcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRyIDo9IF9wZl9zcXNycl9yZWdpb24oYXJuKVxcblxcdHIgIT0gcmVnaW9uXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYXJuLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVBcm5zLiVkXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJzb3VyY2UgcXVldWUgJyVzJyBpcyBpbiAnJXMnIGJ1dCB0aGUgcXVldWUgZGVwbG95cyB0byAnJXMnOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiQWxsIHNvdXJjZSBxdWV1ZSBBUk5zIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBjdXJyZW50IFNRUyBxdWV1ZS5cXFxcXFxcIlxcXCIsIFthcm4sIHIsIHJlZ2lvbl0pLFxcblxcdF9wZl9zcXNycl9maXgsIF9wZl9zcXNycl91cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0YXJucyA6PSBvYmplY3QuZ2V0KF9wZl9zcXNycl9hbGxvdyhuYW1lKSwgXFxcInNvdXJjZVF1ZXVlQXJuc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoYXJucylcXG5cXHRzb21lIGksIGFybiBpbiBhcm5zXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRyIDo9IF9wZl9zcXNycl9yZWdpb24oYXJuKVxcblxcdHIgIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXJlZHJpdmUtcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3FzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlZHJpdmVQb2xpY3kgbmVlZHMgZGVhZExldHRlclRhcmdldEFybiAoYW4gU1FTIHF1ZXVlIEFSTikgYW5kIG1heFJlY2VpdmVDb3VudCBpbiAxLi4xMDAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzcnBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3JwX2ZpeCA6PSBcXFwiU2V0IGJvdGggZGVhZExldHRlclRhcmdldEFybiAoRm46OkdldEF0dCBRdWV1ZS5Bcm4pIGFuZCBtYXhSZWNlaXZlQ291bnQgYmV0d2VlbiAxIGFuZCAxMDAwXFxcIlxcblxcbiMgUmVkcml2ZVBvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNycF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNycF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LiVzXFxcIiwgW2tleV0pLFxcblxcdHNwcmludGYoXFxcIlJlZHJpdmVQb2xpY3kgaGFzIG5vICVzOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiUmVkcml2ZSBwb2xpY3kgZG9lcyBub3QgY29udGFpbiBtYW5kYXRvcnkgYXR0cmlidXRlOiAlcy5cXFxcXFxcIlxcXCIsIFtrZXksIGtleV0pLFxcblxcdF9wZl9zcXNycF9maXgsIF9wZl9zcXNycF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNycF9wb2wobmFtZSlcXG5cXHRzb21lIGtleSBpbiBbXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBcXFwibWF4UmVjZWl2ZUNvdW50XFxcIl1cXG5cXHRvYmplY3QuZ2V0KHBvbCwga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zcXNycF9udW0odikgOj0gdiBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfc3FzcnBfbnVtKHYpIDo9IHRvX251bWJlcih2KSBpZiB7XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgdilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kubWF4UmVjZWl2ZUNvdW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJtYXhSZWNlaXZlQ291bnQgJXYgaXMgb3V0c2lkZSAxLi4xMDAwOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCB2YWx1ZSBmb3IgbWF4UmVjZWl2ZUNvdW50OiAldiwgdmFsaWQgdmFsdWVzIGFyZSBmcm9tIDEgdG8gMTAwMCBib3RoIGluY2x1c2l2ZS5cXFxcXFxcIlxcXCIsIFtuLCBuXSksXFxuXFx0X3BmX3Nxc3JwX2ZpeCwgX3BmX3Nxc3JwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JwX3BvbChuYW1lKVxcblxcdG4gOj0gX3BmX3Nxc3JwX251bShvYmplY3QuZ2V0KHBvbCwgXFxcIm1heFJlY2VpdmVDb3VudFxcXCIsIG51bGwpKVxcblxcdF9wZl9zcXNycF9vdXQobilcXG59XFxuXFxuX3BmX3Nxc3JwX291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9zcXNycF9vdXQobikgaWYgbiA+IDEwMDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZVBvbGljeS5kZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuICclcycgaXMgbm90IGFuIFNRUyBxdWV1ZSBBUk47IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJPbmx5IFNRUyBxdWV1ZXMgYXJlIHZhbGlkIHJlc291cmNlcyBmb3IgZGVhZExldHRlclRhcmdldEFyblxcXFxcXFwiXFxcIiwgW2Fybl0pLFxcblxcdF9wZl9zcXNycF9maXgsIF9wZl9zcXNycF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNycF9wb2wobmFtZSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChwb2wsIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdG5vdCBjb250YWlucyhhcm4sIFxcXCIke1xcXCIpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeYXJuOlteOl0rOnNxczpcXFwiLCBhcm4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXNzZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3FzTWFuYWdlZFNzZUVuYWJsZWQ6IHRydWUgYW5kIEttc01hc3RlcktleUlkIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKG9uZSBTU0UgdHlwZSBwZXIgcXVldWUpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3Fzc3NlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU1NpbXBsZVF1ZXVlU2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVRdWV1ZS5odG1sXFxcIlxcblxcbl9wZl9zcXNzc2VfZml4IDo9IFxcXCJLZWVwIGVpdGhlciBTcXNNYW5hZ2VkU3NlRW5hYmxlZDogdHJ1ZSAoU1NFLVNRUykgb3IgS21zTWFzdGVyS2V5SWQgKFNTRS1LTVMpOyBTcXNNYW5hZ2VkU3NlRW5hYmxlZDogZmFsc2Ugd2l0aCBhIGtleSBpcyBmaW5lXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXNzZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkttc01hc3RlcktleUlkXFxcIixcXG5cXHRcXFwiU3FzTWFuYWdlZFNzZUVuYWJsZWQgaXMgdHJ1ZSBhbmQgS21zTWFzdGVyS2V5SWQgaXMgc2V0OyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiWW91IGNhbiB1c2Ugb25lIHR5cGUgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSBhdCBvbmUgdGltZS4gWW91IGNhbiBlaXRoZXIgZW5hYmxlIEtNUyBTU0Ugb3IgU1FTIFNTRS5cXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nxc3NzZV9maXgsIF9wZl9zcXNzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3FzTWFuYWdlZFNzZUVuYWJsZWRcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJLbXNNYXN0ZXJLZXlJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWJyYW5jaC1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGFyYWxsZWwgQnJhbmNoZXMgaXMgYSBub24tZW1wdHkgYXJyYXkgYW5kIGV2ZXJ5IGJyYW5jaCAvIE1hcCBJdGVtUHJvY2Vzc29yIC8gSXRlcmF0b3IgY2FycmllcyBib3RoIFN0YXJ0QXQgYW5kIFN0YXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuYnJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlLXBhcmFsbGVsLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmJyX2ZpeCA6PSBcXFwiR2l2ZSBldmVyeSBicmFuY2ggYW5kIGl0ZW0gcHJvY2Vzc29yIGEgU3RhcnRBdCBhbmQgYSBTdGF0ZXMgb2JqZWN0OyBhIFBhcmFsbGVsIG5lZWRzIGF0IGxlYXN0IG9uZSBicmFuY2hcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWJyYW5jaC1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQnJhbmNoZXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIlBhcmFsbGVsIHN0YXRlICclcycgaGFzIGFuIGVtcHR5IEJyYW5jaGVzIGFycmF5OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZuYnJfZml4LCBfcGZfc2ZuYnJfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIlBhcmFsbGVsXFxcIlxcblxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQnJhbmNoZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRjb3VudChhcnIpID09IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWJyYW5jaC1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQnJhbmNoZXNbJWRdXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJQYXJhbGxlbCBzdGF0ZSAnJXMnIGJyYW5jaCAlZCBoYXMgbm8gJXM7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbJXNdXFxcXFxcXCJcXFwiLCBbc25hbWUsIGksIHJlcSwgcmVxXSksXFxuXFx0X3BmX3NmbmJyX2ZpeCwgX3BmX3NmbmJyX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgXFxcIkJyYW5jaGVzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdHNvbWUgaSwgYiBpbiBhcnJcXG5cXHRpc19vYmplY3QoYilcXG5cXHRzb21lIHJlcSBpbiBbXFxcIlN0YXJ0QXRcXFwiLCBcXFwiU3RhdGVzXFxcIl1cXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoYiwgcmVxKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtYnJhbmNoLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBrZXldKSxcXG5cXHRzcHJpbnRmKFxcXCJNYXAgc3RhdGUgJyVzJyAlcyBoYXMgbm8gJXM7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbJXNdXFxcXFxcXCJcXFwiLCBbc25hbWUsIGtleSwgcmVxLCByZXFdKSxcXG5cXHRfcGZfc2ZuYnJfZml4LCBfcGZfc2ZuYnJfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUga2V5IGluIFtcXFwiSXRlbVByb2Nlc3NvclxcXCIsIFxcXCJJdGVyYXRvclxcXCJdXFxuXFx0cHJvYyA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2MpXFxuXFx0c29tZSByZXEgaW4gW1xcXCJTdGFydEF0XFxcIiwgXFxcIlN0YXRlc1xcXCJdXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHByb2MsIHJlcSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWNob2ljZS1ydWxlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2hvaWNlIHJ1bGVzOiBDaG9pY2VzIGlzIG5vbi1lbXB0eSwgZWFjaCB0b3AtbGV2ZWwgcnVsZSBoYXMgTmV4dCBhbmQgZXhhY3RseSBvbmUgc2VsZWN0b3IgKFZhcmlhYmxlIC8gQW5kIC8gT3IgLyBOb3QgLyBDb25kaXRpb24pLCBhIFZhcmlhYmxlIHJ1bGUgaGFzIGV4YWN0bHkgb25lIGNvbXBhcmF0b3IsIGFuZCBOZXh0IG5ldmVyIHNpdHMgaW5zaWRlIEFuZC9Pci9Ob3RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZS1jaG9pY2UuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuY2hfZml4IDo9IFxcXCJHaXZlIGV2ZXJ5IHRvcC1sZXZlbCBDaG9pY2UgcnVsZSBvbmUgY29tcGFyaXNvbiAob3Igb25lIEFuZC9Pci9Ob3QvQ29uZGl0aW9uKSBhbmQgYSBOZXh0OyBuZXN0ZWQgcnVsZXMgY2Fycnkgbm8gTmV4dFxcXCJcXG5cXG5fcGZfc2ZuY2hfY21wIDo9IHtcXFwiU3RyaW5nRXF1YWxzXFxcIiwgXFxcIlN0cmluZ0VxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nTGVzc1RoYW5cXFwiLCBcXFwiU3RyaW5nTGVzc1RoYW5QYXRoXFxcIiwgXFxcIlN0cmluZ0dyZWF0ZXJUaGFuXFxcIiwgXFxcIlN0cmluZ0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJTdHJpbmdMZXNzVGhhbkVxdWFsc1xcXCIsIFxcXCJTdHJpbmdMZXNzVGhhbkVxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nR3JlYXRlclRoYW5FcXVhbHNcXFwiLCBcXFwiU3RyaW5nR3JlYXRlclRoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIlN0cmluZ01hdGNoZXNcXFwiLCBcXFwiTnVtZXJpY0VxdWFsc1xcXCIsIFxcXCJOdW1lcmljRXF1YWxzUGF0aFxcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5cXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuUGF0aFxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5cXFwiLCBcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5FcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5FcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJCb29sZWFuRXF1YWxzXFxcIiwgXFxcIkJvb2xlYW5FcXVhbHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcEVxdWFsc1xcXCIsIFxcXCJUaW1lc3RhbXBFcXVhbHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcExlc3NUaGFuXFxcIiwgXFxcIlRpbWVzdGFtcExlc3NUaGFuUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBHcmVhdGVyVGhhblxcXCIsIFxcXCJUaW1lc3RhbXBHcmVhdGVyVGhhblBhdGhcXFwiLCBcXFwiVGltZXN0YW1wTGVzc1RoYW5FcXVhbHNcXFwiLCBcXFwiVGltZXN0YW1wTGVzc1RoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcEdyZWF0ZXJUaGFuRXF1YWxzXFxcIiwgXFxcIlRpbWVzdGFtcEdyZWF0ZXJUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJJc051bGxcXFwiLCBcXFwiSXNQcmVzZW50XFxcIiwgXFxcIklzTnVtZXJpY1xcXCIsIFxcXCJJc1N0cmluZ1xcXCIsIFxcXCJJc0Jvb2xlYW5cXFwiLCBcXFwiSXNUaW1lc3RhbXBcXFwifVxcblxcbl9wZl9zZm5jaF9zZWwgOj0ge1xcXCJBbmRcXFwiLCBcXFwiT3JcXFwiLCBcXFwiTm90XFxcIiwgXFxcIlZhcmlhYmxlXFxcIiwgXFxcIkNvbmRpdGlvblxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWNob2ljZS1ydWxlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2hvaWNlc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgaGFzIGFuIGVtcHR5IENob2ljZXMgYXJyYXk7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiQ2hvaWNlXFxcIlxcblxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQ2hvaWNlc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdGNvdW50KGFycikgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtY2hvaWNlLXJ1bGVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBoYXMgbm8gTmV4dDsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQ6IFtOZXh0XVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpXSksXFxuXFx0X3BmX3NmbmNoX2ZpeCwgX3BmX3NmbmNoX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhjLCBcXFwiTmV4dFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1jaG9pY2UtcnVsZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNob2ljZXNbJWRdLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGksIG9wXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBuZXN0cyBhIE5leHQgaW5zaWRlICVzOyBvbmx5IHRoZSB0b3AtbGV2ZWwgcnVsZSBtYXkgY2FycnkgTmV4dCwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBGaWVsZCAnTmV4dCcgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBvcF0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgaSwgY10gaW4gX3BmX3NmbmxpYl9jaG9pY2VcXG5cXHRzb21lIG9wIGluIFtcXFwiQW5kXFxcIiwgXFxcIk9yXFxcIl1cXG5cXHRhcnIgOj0gb2JqZWN0LmdldChjLCBvcCwgW10pXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdHNvbWUgc3ViIGluIGFyclxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0X3BmX3NmbmxpYl9oYXMoc3ViLCBcXFwiTmV4dFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1jaG9pY2UtcnVsZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNob2ljZXNbJWRdLk5vdFxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBuZXN0cyBhIE5leHQgaW5zaWRlIE5vdDsgb25seSB0aGUgdG9wLWxldmVsIHJ1bGUgbWF5IGNhcnJ5IE5leHQsIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJ05leHQnIGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZSwgaV0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgaSwgY10gaW4gX3BmX3NmbmxpYl9jaG9pY2VcXG5cXHRzdWIgOj0gb2JqZWN0LmdldChjLCBcXFwiTm90XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdF9wZl9zZm5saWJfaGFzKHN1YiwgXFxcIk5leHRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtY2hvaWNlLXJ1bGVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBoYXMgJWQgY29tcGFyaXNvbiBvcGVyYXRvcnM7IGEgVmFyaWFibGUgcnVsZSB0YWtlcyBleGFjdGx5IG9uZSwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IFtTdHJpbmdFcXVhbHMsIC4uLl1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgaSwgbl0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgaSwgY10gaW4gX3BmX3NmbmxpYl9jaG9pY2VcXG5cXHRfcGZfc2ZubGliX2hhcyhjLCBcXFwiVmFyaWFibGVcXFwiKVxcblxcdG4gOj0gY291bnQoe2sgfCBzb21lIGssIF8gaW4gYzsgayBpbiBfcGZfc2ZuY2hfY21wfSlcXG5cXHRuICE9IDFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWNob2ljZS1ydWxlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2hvaWNlc1slZF1cXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgaV0pLFxcblxcdHNwcmludGYoXFxcIkNob2ljZSBzdGF0ZSAnJXMnIHJ1bGUgJWQgbXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIEFuZCAvIE9yIC8gTm90IC8gVmFyaWFibGUgLyBDb25kaXRpb24gKGZvdW5kICVkKTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZSBvYmplY3QgbXVzdCBoYXZlIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzLCBbQW5kLCBPciwgTm90LCBWYXJpYWJsZSwgQ29uZGl0aW9uXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBuXSksXFxuXFx0X3BmX3NmbmNoX2ZpeCwgX3BmX3NmbmNoX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdG4gOj0gY291bnQoe2sgfCBzb21lIGssIF8gaW4gYzsgayBpbiBfcGZfc2ZuY2hfc2VsfSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWNyZWRlbnRpYWxzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFRhc2sgQ3JlZGVudGlhbHMgb2JqZWN0IG5lZWRzIFJvbGVBcm4sIGFuZCBDcmVkZW50aWFscyBpcyBub3QgYWNjZXB0ZWQgb24gYW4gQWN0aXZpdHkgcmVzb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmNyZWRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlLXRhc2suaHRtbFxcXCJcXG5cXG5fcGZfc2ZuY3JlZF9maXggOj0gXFxcIlNldCBDcmVkZW50aWFscy5Sb2xlQXJuIChvciBSb2xlQXJuLiQpOyBkcm9wIENyZWRlbnRpYWxzIGZyb20gYWN0aXZpdHkgdGFza3NcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWNyZWRlbnRpYWxzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DcmVkZW50aWFsc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiVGFzayBzdGF0ZSAnJXMnIGhhcyBDcmVkZW50aWFscyB3aXRob3V0IFJvbGVBcm47IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ1JvbGVBcm4nIGlzIHJlcXVpcmVkIGJ1dCB3YXMgbWlzc2luZ1xcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3NmbmNyZWRfZml4LCBfcGZfc2ZuY3JlZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0Y3JlZCA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQ3JlZGVudGlhbHNcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChjcmVkKVxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhjcmVkLCBcXFwiUm9sZUFyblxcXCIpXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKGNyZWQsIFxcXCJSb2xlQXJuLiRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtY3JlZGVudGlhbHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNyZWRlbnRpYWxzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSldKSxcXG5cXHRzcHJpbnRmKFxcXCJUYXNrIHN0YXRlICclcycgc2V0cyBDcmVkZW50aWFscyBvbiBhbiBBY3Rpdml0eSByZXNvdXJjZTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZSBmaWVsZCAnQ3JlZGVudGlhbHMnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGFjdGl2aXRpZXNcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5jcmVkX2ZpeCwgX3BmX3NmbmNyZWRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiQ3JlZGVudGlhbHNcXFwiKVxcblxcdHJlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmVzb3VyY2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyZXMpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3RhdGVzOlteOl0rOlteOl0rOmFjdGl2aXR5OlxcXCIsIHJlcylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWR1cGxpY2F0ZS1zdGF0ZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBU0wgc3RhdGUgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRoZSB3aG9sZSBzdGF0ZSBtYWNoaW5lLCBpbmNsdWRpbmcgUGFyYWxsZWwgYnJhbmNoZXMgYW5kIE1hcCBpdGVtIHByb2Nlc3NvcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmR1cF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGUtcGFyYWxsZWwuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuZHVwX2ZpeCA6PSBcXFwiUmVuYW1lIG9uZSBvZiB0aGUgc3RhdGVzOyBuYW1lcyBhcmUgZ2xvYmFsIHRvIHRoZSBzdGF0ZSBtYWNoaW5lLCBub3QgdG8gdGhlIGJyYW5jaFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtZHVwbGljYXRlLXN0YXRlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwMiwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcInN0YXRlIG5hbWUgJyVzJyBpcyBkZWZpbmVkIGluIGJvdGggJXMgYW5kICVzOyBuYW1lcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgdGhlIHdob2xlIHN0YXRlIG1hY2hpbmUsIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkRVUExJQ0FURV9TVEFURV9OQU1FOiBEdXBsaWNhdGUgU3RhdGUgbmFtZTogJXNcXFxcXFxcIlxcXCIsIFtzbmFtZSwgcDEsIHAyLCBzbmFtZV0pLFxcblxcdF9wZl9zZm5kdXBfZml4LCBfcGZfc2ZuZHVwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAxLCBfLCBzbmFtZSwgX10gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFtuMiwgcDIsIF8sIHNuMiwgX10gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRuMiA9PSBuYW1lXFxuXFx0c24yID09IHNuYW1lXFxuXFx0cDEgPCBwMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtaW50ZWdyYXRpb24tcGFyYW1ldGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gYXJuOjxwYXJ0aXRpb24+OnN0YXRlczo6OiBpbnRlZ3JhdGlvbiBUYXNrIG5lZWRzIFBhcmFtZXRlcnMgKEpTT05QYXRoKSBvciBBcmd1bWVudHMgKEpTT05hdGEpLCBhbmQgdGhlIGNvbW1vbiBpbnRlZ3JhdGlvbnMgbmVlZCB0aGVpciByZXF1aXJlZCBmaWVsZHMgKGxhbWJkYTppbnZva2UgRnVuY3Rpb25OYW1lLCBzcXM6c2VuZE1lc3NhZ2UgUXVldWVVcmwrTWVzc2FnZUJvZHksIHNuczpwdWJsaXNoIE1lc3NhZ2UsIGR5bmFtb2RiOnB1dEl0ZW0gVGFibGVOYW1lK0l0ZW0sIGR5bmFtb2RiOmdldEl0ZW0gVGFibGVOYW1lK0tleSwgc3RhdGVzOnN0YXJ0RXhlY3V0aW9uIFN0YXRlTWFjaGluZUFybiwgZXZlbnRzOnB1dEV2ZW50cyBFbnRyaWVzLCBlY3M6cnVuVGFzayBUYXNrRGVmaW5pdGlvbiwgZ2x1ZTpzdGFydEpvYlJ1biBKb2JOYW1lKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuaXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2Nvbm5lY3QtdG8tcmVzb3VyY2UuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuaXBfZml4IDo9IFxcXCJBZGQgYSBQYXJhbWV0ZXJzIChvciBBcmd1bWVudHMpIG9iamVjdCB3aXRoIHRoZSBmaWVsZHMgdGhlIGludGVncmF0aW9uIHJlcXVpcmVzXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1pbnRlZ3JhdGlvbi1wYXJhbWV0ZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcIlRhc2sgc3RhdGUgJyVzJyBjYWxscyB0aGUgJXM6JXMgaW50ZWdyYXRpb24gd2l0aG91dCBhIFBhcmFtZXRlcnMgb2JqZWN0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogUGFyYW1ldGVycyBmaWVsZCBpcyByZXF1aXJlZCBmb3IgcmVzb3VyY2UgQVJOOiBhcm46YXdzOnN0YXRlczo6OiVzOiVzXFxcXFxcXCJcXFwiLCBbc25hbWUsIHN2YywgYXBpLCBzdmMsIGFwaV0pLFxcblxcdF9wZl9zZm5pcF9maXgsIF9wZl9zZm5pcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3QsIHN2YywgYXBpXSBpbiBfcGZfc2ZubGliX2ludGVncmF0aW9uXFxuXFx0X3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgPT0gXFxcIkpTT05QYXRoXFxcIlxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhzdCwgXFxcIlBhcmFtZXRlcnNcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtaW50ZWdyYXRpb24tcGFyYW1ldGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0X3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSxcXG5cXHRzcHJpbnRmKFxcXCJKU09OYXRhIFRhc2sgc3RhdGUgJyVzJyBjYWxscyB0aGUgJXM6JXMgaW50ZWdyYXRpb24gd2l0aG91dCBhbiBBcmd1bWVudHMgb2JqZWN0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogQXJndW1lbnRzIGZpZWxkIGlzIHJlcXVpcmVkIGZvciByZXNvdXJjZSBBUk46IGFybjphd3M6c3RhdGVzOjo6JXM6JXNcXFxcXFxcIlxcXCIsIFtzbmFtZSwgc3ZjLCBhcGksIHN2YywgYXBpXSksXFxuXFx0X3BmX3NmbmlwX2ZpeCwgX3BmX3NmbmlwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdCwgc3ZjLCBhcGldIGluIF9wZl9zZm5saWJfaW50ZWdyYXRpb25cXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTmF0YVxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoc3QsIFxcXCJBcmd1bWVudHNcXFwiKVxcbn1cXG5cXG4jIFJlcXVpcmVkIHJlcXVlc3QgZmllbGRzLCBtZWFzdXJlZCB3aXRoIFZhbGlkYXRlU3RhdGVNYWNoaW5lRGVmaW5pdGlvbiBvblxcbiMgMjAyNi0wOS0wNSAoYSBcXFwiLiRcXFwiIHN1ZmZpeGVkIGtleSBjb3VudHMgYXMgcHJlc2VudCkuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcImxhbWJkYVxcXCIsIFxcXCJpbnZva2VcXFwiLCBcXFwiRnVuY3Rpb25OYW1lXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwic3FzXFxcIiwgXFxcInNlbmRNZXNzYWdlXFxcIiwgXFxcIlF1ZXVlVXJsXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwic3FzXFxcIiwgXFxcInNlbmRNZXNzYWdlXFxcIiwgXFxcIk1lc3NhZ2VCb2R5XFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwic25zXFxcIiwgXFxcInB1Ymxpc2hcXFwiLCBcXFwiTWVzc2FnZVxcXCJdXFxuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcImR5bmFtb2RiXFxcIiwgXFxcInB1dEl0ZW1cXFwiLCBcXFwiVGFibGVOYW1lXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwiZHluYW1vZGJcXFwiLCBcXFwicHV0SXRlbVxcXCIsIFxcXCJJdGVtXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwiZHluYW1vZGJcXFwiLCBcXFwiZ2V0SXRlbVxcXCIsIFxcXCJUYWJsZU5hbWVcXFwiXVxcblxcbl9wZl9zZm5pcF9yZXEgY29udGFpbnMgW1xcXCJkeW5hbW9kYlxcXCIsIFxcXCJnZXRJdGVtXFxcIiwgXFxcIktleVxcXCJdXFxuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcInN0YXRlc1xcXCIsIFxcXCJzdGFydEV4ZWN1dGlvblxcXCIsIFxcXCJTdGF0ZU1hY2hpbmVBcm5cXFwiXVxcblxcbl9wZl9zZm5pcF9yZXEgY29udGFpbnMgW1xcXCJldmVudHNcXFwiLCBcXFwicHV0RXZlbnRzXFxcIiwgXFxcIkVudHJpZXNcXFwiXVxcblxcbl9wZl9zZm5pcF9yZXEgY29udGFpbnMgW1xcXCJlY3NcXFwiLCBcXFwicnVuVGFza1xcXCIsIFxcXCJUYXNrRGVmaW5pdGlvblxcXCJdXFxuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcImdsdWVcXFwiLCBcXFwic3RhcnRKb2JSdW5cXFwiLCBcXFwiSm9iTmFtZVxcXCJdXFxuXFxuX3BmX3NmbmlwX3BhcmFtcyhzdCkgOj0gcHJtIGlmIHtcXG5cXHRwcm0gOj0gb2JqZWN0LmdldChzdCwgXFxcIlBhcmFtZXRlcnNcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm0pXFxufVxcblxcbl9wZl9zZm5pcF9wYXJhbXMoc3QpIDo9IHBybSBpZiB7XFxuXFx0bm90IGlzX29iamVjdChvYmplY3QuZ2V0KHN0LCBcXFwiUGFyYW1ldGVyc1xcXCIsIG51bGwpKVxcblxcdHBybSA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQXJndW1lbnRzXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJtKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtaW50ZWdyYXRpb24tcGFyYW1ldGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0X3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSxcXG5cXHRzcHJpbnRmKFxcXCJUYXNrIHN0YXRlICclcycgY2FsbHMgJXM6JXMgd2l0aG91dCB0aGUgcmVxdWlyZWQgZmllbGQgJyVzJzsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZSBmaWVsZCAnJXMnIGlzIHJlcXVpcmVkIGJ1dCB3YXMgbWlzc2luZ1xcXFxcXFwiXFxcIiwgW3NuYW1lLCBzdmMsIGJhc2UsIGZpZWxkLCBmaWVsZF0pLFxcblxcdF9wZl9zZm5pcF9maXgsIF9wZl9zZm5pcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3QsIHN2YywgYXBpXSBpbiBfcGZfc2ZubGliX2ludGVncmF0aW9uXFxuXFx0YmFzZSA6PSByZWdleC5yZXBsYWNlKGFwaSwgXFxcIlsuXShzeW5jfHdhaXRGb3JUYXNrVG9rZW4pKDoyKT8kXFxcIiwgXFxcIlxcXCIpXFxuXFx0c29tZSBbczIsIGIyLCBmaWVsZF0gaW4gX3BmX3NmbmlwX3JlcVxcblxcdHMyID09IHN2Y1xcblxcdGIyID09IGJhc2VcXG5cXHRwcm0gOj0gX3BmX3NmbmlwX3BhcmFtcyhzdClcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocHJtLCBmaWVsZClcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocHJtLCBzcHJpbnRmKFxcXCIlcy4kXFxcIiwgW2ZpZWxkXSkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1qc29ucGF0aC1zeW50YXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpTT05QYXRoIGZpZWxkcyBzdGFydCB3aXRoICQgKElucHV0UGF0aCwgT3V0cHV0UGF0aCwgKlBhdGgsIENob2ljZSBWYXJpYWJsZSksIFJlc3VsdFBhdGgvSXRlbXNQYXRoIGFyZSBSZWZlcmVuY2UgUGF0aHMgKG5vICosIC4uLCA/LCBAKSwgdmFsdWVzIG9mIFxcXCIuJFxcXCIga2V5cyBhcmUgYSBwYXRoIG9yIGEgU3RhdGVzLiogaW50cmluc2ljLCBhbmQgQXNzaWduIHZhcmlhYmxlIG5hbWVzIGFyZSBhbHBoYW51bWVyaWMgYW5kIG5vdCB0aGUgcmVzZXJ2ZWQgXFxcInN0YXRlc1xcXCJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmpwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9pbnB1dC1vdXRwdXQtcGF0aHMuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuanBfZml4IDo9IFxcXCJXcml0ZSBwYXRocyBhcyAkLmZpZWxkIChSZWZlcmVuY2UgUGF0aHMgZm9yIFJlc3VsdFBhdGgvSXRlbXNQYXRoKSwgXFxcXFxcXCIuJFxcXFxcXFwiIHZhbHVlcyBhcyAkLnBhdGggb3IgU3RhdGVzLkZ1bmMoLi4uKSwgYW5kIHZhcmlhYmxlIG5hbWVzIGFzIGxldHRlcnMvZGlnaXRzXFxcIlxcblxcbl9wZl9zZm5qcF9wYXRoZmllbGRzIDo9IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiUmVzdWx0UGF0aFxcXCIsIFxcXCJJdGVtc1BhdGhcXFwiLCBcXFwiVGltZW91dFNlY29uZHNQYXRoXFxcIiwgXFxcIkhlYXJ0YmVhdFNlY29uZHNQYXRoXFxcIiwgXFxcIlNlY29uZHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcFBhdGhcXFwiLCBcXFwiTWF4Q29uY3VycmVuY3lQYXRoXFxcIiwgXFxcIlRvbGVyYXRlZEZhaWx1cmVQZXJjZW50YWdlUGF0aFxcXCIsIFxcXCJUb2xlcmF0ZWRGYWlsdXJlQ291bnRQYXRoXFxcIiwgXFxcIkVycm9yUGF0aFxcXCIsIFxcXCJDYXVzZVBhdGhcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1qc29ucGF0aC1zeW50YXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzICclcycgaXMgbm90IGEgSlNPTlBhdGggKG11c3Qgc3RhcnQgd2l0aCAkKTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFZhbHVlIG11c3QgYmUgYSB2YWxpZCBKU09OUGF0aC5cXFxcXFxcIlxcXCIsIFtzbmFtZSwgZiwgdl0pLFxcblxcdF9wZl9zZm5qcF9maXgsIF9wZl9zZm5qcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmIGluIF9wZl9zZm5qcF9wYXRoZmllbGRzXFxuXFx0diA6PSBvYmplY3QuZ2V0KHN0LCBmLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCBzdGFydHN3aXRoKHYsIFxcXCIkXFxcIilcXG5cXHRub3QgY29udGFpbnModiwgXFxcIiR7XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWpzb25wYXRoLXN5bnRheFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2hvaWNlc1slZF0uJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgaSwga10pLFxcblxcdHNwcmludGYoXFxcIkNob2ljZSBzdGF0ZSAnJXMnIHJ1bGUgJWQgJXMgJyVzJyBpcyBub3QgYSBSZWZlcmVuY2UgUGF0aCAobXVzdCBzdGFydCB3aXRoICQpOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgaXMgbm90IGEgUmVmZXJlbmNlIFBhdGg6IFJlZmVyZW5jZSBwYXRoIGRpZG4ndCBzdGFydCB3aXRoICckJ1xcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBrLCB2XSksXFxuXFx0X3BmX3NmbmpwX2ZpeCwgX3BmX3NmbmpwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdHNvbWUgaywgdiBpbiBjXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0ayBpbiB7XFxcIlZhcmlhYmxlXFxcIiwgXFxcIlN0cmluZ0VxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nTGVzc1RoYW5QYXRoXFxcIiwgXFxcIlN0cmluZ0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJTdHJpbmdMZXNzVGhhbkVxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nR3JlYXRlclRoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIk51bWVyaWNFcXVhbHNQYXRoXFxcIiwgXFxcIk51bWVyaWNMZXNzVGhhblBhdGhcXFwiLCBcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIk51bWVyaWNHcmVhdGVyVGhhbkVxdWFsc1BhdGhcXFwiLCBcXFwiQm9vbGVhbkVxdWFsc1BhdGhcXFwiLCBcXFwiVGltZXN0YW1wRXF1YWxzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBMZXNzVGhhblBhdGhcXFwiLCBcXFwiVGltZXN0YW1wR3JlYXRlclRoYW5QYXRoXFxcIiwgXFxcIlRpbWVzdGFtcExlc3NUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBHcmVhdGVyVGhhbkVxdWFsc1BhdGhcXFwifVxcblxcdG5vdCBzdGFydHN3aXRoKHYsIFxcXCIkXFxcIilcXG59XFxuXFxuX3BmX3NmbmpwX3JlZnBhdGggY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmIGluIFtcXFwiUmVzdWx0UGF0aFxcXCIsIFxcXCJJdGVtc1BhdGhcXFwiXVxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKVxcbn1cXG5cXG5fcGZfc2ZuanBfcmVmcGF0aCBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgXFxcIkNhdGNoXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdHNvbWUgaSwgYyBpbiBhcnJcXG5cXHRpc19vYmplY3QoYylcXG5cXHR2IDo9IG9iamVjdC5nZXQoYywgXFxcIlJlc3VsdFBhdGhcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuQ2F0Y2hbJWRdLlJlc3VsdFBhdGhcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgaV0pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1qc29ucGF0aC1zeW50YXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiJyVzJyBpcyBub3QgYSBSZWZlcmVuY2UgUGF0aDogd2lsZGNhcmRzLCBmaWx0ZXJzIGFuZCBkZWVwIHNjYW5zICgqIC4uID8gQCkgYXJlIG5vdCBhbGxvd2VkIHdoZXJlIGEgc2luZ2xlIEpTT04gbm9kZSBpcyBhZGRyZXNzZWQ7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBpcyBub3QgYSBSZWZlcmVuY2UgUGF0aFxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRfcGZfc2ZuanBfZml4LCBfcGZfc2ZuanBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgdl0gaW4gX3BmX3NmbmpwX3JlZnBhdGhcXG5cXHRyZWdleC5tYXRjaChcXFwiWyo/QF18Wy5dWy5dXFxcIiwgdilcXG59XFxuXFxuIyBcXFwiLiRcXFwiIGtleXMgb2YgcGF5bG9hZCB0ZW1wbGF0ZXMgKFBhcmFtZXRlcnMgLyBSZXN1bHRTZWxlY3RvciAvIEl0ZW1TZWxlY3RvciksXFxuIyB0d28gbGV2ZWxzIGRlZXAuXFxuX3BmX3NmbmpwX2RvbGxhciBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGYgaW4gW1xcXCJQYXJhbWV0ZXJzXFxcIiwgXFxcIlJlc3VsdFNlbGVjdG9yXFxcIiwgXFxcIkl0ZW1TZWxlY3RvclxcXCJdXFxuXFx0byA6PSBvYmplY3QuZ2V0KHN0LCBmLCBudWxsKVxcblxcdGlzX29iamVjdChvKVxcblxcdHNvbWUgaywgdiBpbiBvXFxuXFx0ZW5kc3dpdGgoaywgXFxcIi4kXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGYsIGtdKVxcbn1cXG5cXG5fcGZfc2ZuanBfZG9sbGFyIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCB2XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUgZiBpbiBbXFxcIlBhcmFtZXRlcnNcXFwiLCBcXFwiUmVzdWx0U2VsZWN0b3JcXFwiLCBcXFwiSXRlbVNlbGVjdG9yXFxcIl1cXG5cXHRvIDo9IG9iamVjdC5nZXQoc3QsIGYsIG51bGwpXFxuXFx0aXNfb2JqZWN0KG8pXFxuXFx0c29tZSBrLCBvMiBpbiBvXFxuXFx0aXNfb2JqZWN0KG8yKVxcblxcdHNvbWUgazIsIHYgaW4gbzJcXG5cXHRlbmRzd2l0aChrMiwgXFxcIi4kXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLiVzLiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGYsIGssIGsyXSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWpzb25wYXRoLXN5bnRheFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJ2YWx1ZSAnJXMnIG9mIGEgXFxcXFxcXCIuJFxcXFxcXFwiIGtleSBtdXN0IGJlIGEgSlNPTlBhdGggKCQuLi4pIG9yIGFuIGludHJpbnNpYyBmdW5jdGlvbiAoU3RhdGVzLi4uLik7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgdmFsdWUgZm9yIHRoZSBmaWVsZCAnLi4uJCcgbXVzdCBiZSBhIHZhbGlkIEpTT05QYXRoIG9yIGEgdmFsaWQgaW50cmluc2ljIGZ1bmN0aW9uIGNhbGxcXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0X3BmX3NmbmpwX2ZpeCwgX3BmX3NmbmpwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHZdIGluIF9wZl9zZm5qcF9kb2xsYXJcXG5cXHRub3Qgc3RhcnRzd2l0aCh2LCBcXFwiJFxcXCIpXFxuXFx0bm90IHN0YXJ0c3dpdGgodiwgXFxcIlN0YXRlcy5cXFwiKVxcblxcdG5vdCBjb250YWlucyh2LCBcXFwiJHtcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtanNvbnBhdGgtc3ludGF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5Bc3NpZ24uJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga10pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgYXNzaWducyB0aGUgcmVzZXJ2ZWQgdmFyaWFibGUgbmFtZSAnc3RhdGVzJzsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJSRVNFUlZFRF9WQVJJQUJMRV9OQU1FOiBDYW5ub3QgYXNzaWduIHRvIHJlc2VydmVkIHZhcmlhYmxlICckc3RhdGVzJy5cXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5qcF9maXgsIF9wZl9zZm5qcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0YSA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQXNzaWduXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoYSlcXG5cXHRzb21lIGssIF8gaW4gYVxcblxcdGsgPT0gXFxcInN0YXRlc1xcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWpzb25wYXRoLXN5bnRheFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQXNzaWduLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGFzc2lnbnMgdmFyaWFibGUgJyVzJzsgdmFyaWFibGUgbmFtZXMgYXJlIGxldHRlcnMgYW5kIGRpZ2l0cyBzdGFydGluZyB3aXRoIGEgbGV0dGVyLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJJTlZBTElEX1ZBUklBQkxFX05BTUU6IEludmFsaWQgdmFyaWFibGUgbmFtZSAnJXMnOiB0aGUgdmFyaWFibGUgbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuXFxcXFxcXCJcXFwiLCBbc25hbWUsIGssIGtdKSxcXG5cXHRfcGZfc2ZuanBfZml4LCBfcGZfc2ZuanBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdGEgOj0gb2JqZWN0LmdldChzdCwgXFxcIkFzc2lnblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGEpXFxuXFx0c29tZSBrLCBfIGluIGFcXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5bQS1aYS16XVtBLVphLXowLTlfXSokXFxcIiwgaylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW1hcC1kaXN0cmlidXRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWFwIFByb2Nlc3NvckNvbmZpZyBhbmQgSXRlbVJlYWRlciBzaGFwZTogRElTVFJJQlVURUQgcmVxdWlyZXMgRXhlY3V0aW9uVHlwZSAoU1RBTkRBUkR8RVhQUkVTUykgYW5kIElOTElORSBmb3JiaWRzIGl0OyBJdGVtUmVhZGVyLlJlc291cmNlIGlzIHMzOmdldE9iamVjdCBvciBzMzpsaXN0T2JqZWN0c1YyOyBDU1YgaW5wdXQgbmVlZHMgQ1NWSGVhZGVyTG9jYXRpb24gKEdJVkVOIG5lZWRzIENTVkhlYWRlcnMpIGFuZCBKU09OIGlucHV0IGZvcmJpZHMgaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbm1kX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZS1tYXAtZGlzdHJpYnV0ZWQuaHRtbFxcXCJcXG5cXG5fcGZfc2ZubWRfZml4IDo9IFxcXCJTZXQgUHJvY2Vzc29yQ29uZmlnLkV4ZWN1dGlvblR5cGUgZm9yIERJU1RSSUJVVEVEIG1vZGUgb25seSwgYW5kIHNoYXBlIEl0ZW1SZWFkZXIgcGVyIHRoZSBEaXN0cmlidXRlZCBNYXAgZG9jdW1lbnRhdGlvblxcXCJcXG5cXG5fcGZfc2ZubWRfY2ZnIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwga2V5LCBjZmddIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBrZXkgaW4gW1xcXCJJdGVtUHJvY2Vzc29yXFxcIiwgXFxcIkl0ZXJhdG9yXFxcIl1cXG5cXHRwcm9jIDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvYylcXG5cXHRjZmcgOj0gb2JqZWN0LmdldChwcm9jLCBcXFwiUHJvY2Vzc29yQ29uZmlnXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoY2ZnKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWFwLWRpc3RyaWJ1dGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lcy5Qcm9jZXNzb3JDb25maWdcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgcnVucyBpbiBESVNUUklCVVRFRCBtb2RlIHdpdGhvdXQgRXhlY3V0aW9uVHlwZTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQ6IFtFeGVjdXRpb25UeXBlXVxcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3Nmbm1kX2ZpeCwgX3BmX3Nmbm1kX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBrZXksIGNmZ10gaW4gX3BmX3Nmbm1kX2NmZ1xcblxcdG9iamVjdC5nZXQoY2ZnLCBcXFwiTW9kZVxcXCIsIG51bGwpID09IFxcXCJESVNUUklCVVRFRFxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoY2ZnLCBcXFwiRXhlY3V0aW9uVHlwZVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1tYXAtZGlzdHJpYnV0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzLlByb2Nlc3NvckNvbmZpZy5FeGVjdXRpb25UeXBlXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGtleV0pLFxcblxcdHNwcmludGYoXFxcIk1hcCBzdGF0ZSAnJXMnIEV4ZWN1dGlvblR5cGUgJyVzJyBpcyBub3QgU1RBTkRBUkQgb3IgRVhQUkVTUzsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFZhbHVlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogW1NUQU5EQVJELCBFWFBSRVNTXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBldF0pLFxcblxcdF9wZl9zZm5tZF9maXgsIF9wZl9zZm5tZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwga2V5LCBjZmddIGluIF9wZl9zZm5tZF9jZmdcXG5cXHRldCA6PSBvYmplY3QuZ2V0KGNmZywgXFxcIkV4ZWN1dGlvblR5cGVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhldClcXG5cXHRub3QgZXQgaW4ge1xcXCJTVEFOREFSRFxcXCIsIFxcXCJFWFBSRVNTXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1hcC1kaXN0cmlidXRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXMuUHJvY2Vzc29yQ29uZmlnLkV4ZWN1dGlvblR5cGVcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgc2V0cyBFeGVjdXRpb25UeXBlIGluIElOTElORSBtb2RlOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJ0V4ZWN1dGlvblR5cGUnIGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5tZF9maXgsIF9wZl9zZm5tZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwga2V5LCBjZmddIGluIF9wZl9zZm5tZF9jZmdcXG5cXHRvYmplY3QuZ2V0KGNmZywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiSU5MSU5FXFxcIlxcblxcdF9wZl9zZm5saWJfaGFzKGNmZywgXFxcIkV4ZWN1dGlvblR5cGVcXFwiKVxcbn1cXG5cXG5fcGZfc2ZubWRfcmVhZGVyIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgaXJdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiTWFwXFxcIlxcblxcdGlyIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJJdGVtUmVhZGVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaXIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1tYXAtZGlzdHJpYnV0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkl0ZW1SZWFkZXIuUmVzb3VyY2VcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIk1hcCBzdGF0ZSAnJXMnIEl0ZW1SZWFkZXIuUmVzb3VyY2UgJyVzJyBpcyBub3QgczM6Z2V0T2JqZWN0IG9yIHMzOmxpc3RPYmplY3RzVjI7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ1Jlc291cmNlJyBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFsbG93ZWQgdmFsdWVzXFxcXFxcXCJcXFwiLCBbc25hbWUsIHJlc10pLFxcblxcdF9wZl9zZm5tZF9maXgsIF9wZl9zZm5tZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwgaXJdIGluIF9wZl9zZm5tZF9yZWFkZXJcXG5cXHRyZXMgOj0gb2JqZWN0LmdldChpciwgXFxcIlJlc291cmNlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmVzKVxcblxcdG5vdCBjb250YWlucyhyZXMsIFxcXCIke1xcXCIpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeYXJuOlteOl0rOnN0YXRlczo6OnMzOihnZXRPYmplY3R8bGlzdE9iamVjdHNWMikkXFxcIiwgcmVzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWFwLWRpc3RyaWJ1dGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5JdGVtUmVhZGVyLlJlYWRlckNvbmZpZ1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgcmVhZHMgQ1NWIHdpdGhvdXQgQ1NWSGVhZGVyTG9jYXRpb247IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ0NTVkhlYWRlckxvY2F0aW9uJyBpcyByZXF1aXJlZFxcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3Nmbm1kX2ZpeCwgX3BmX3Nmbm1kX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBpcl0gaW4gX3BmX3Nmbm1kX3JlYWRlclxcblxcdHJjIDo9IG9iamVjdC5nZXQoaXIsIFxcXCJSZWFkZXJDb25maWdcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChyYylcXG5cXHRvYmplY3QuZ2V0KHJjLCBcXFwiSW5wdXRUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkNTVlxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocmMsIFxcXCJDU1ZIZWFkZXJMb2NhdGlvblxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1tYXAtZGlzdHJpYnV0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkl0ZW1SZWFkZXIuUmVhZGVyQ29uZmlnLkNTVkhlYWRlckxvY2F0aW9uXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSldKSxcXG5cXHRzcHJpbnRmKFxcXCJNYXAgc3RhdGUgJyVzJyByZWFkcyBKU09OIGJ1dCBzZXRzIENTVkhlYWRlckxvY2F0aW9uOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJ0NTVkhlYWRlckxvY2F0aW9uJyBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZubWRfZml4LCBfcGZfc2ZubWRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIGlyXSBpbiBfcGZfc2ZubWRfcmVhZGVyXFxuXFx0cmMgOj0gb2JqZWN0LmdldChpciwgXFxcIlJlYWRlckNvbmZpZ1xcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHJjKVxcblxcdG9iamVjdC5nZXQocmMsIFxcXCJJbnB1dFR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSlNPTlxcXCJcXG5cXHRfcGZfc2ZubGliX2hhcyhyYywgXFxcIkNTVkhlYWRlckxvY2F0aW9uXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1hcC1kaXN0cmlidXRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuSXRlbVJlYWRlci5SZWFkZXJDb25maWdcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIk1hcCBzdGF0ZSAnJXMnIHNldHMgQ1NWSGVhZGVyTG9jYXRpb24gR0lWRU4gd2l0aG91dCBDU1ZIZWFkZXJzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlc2UgZmllbGRzIGFyZSByZXF1aXJlZDogW0NTVkhlYWRlcnNdXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZubWRfZml4LCBfcGZfc2ZubWRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIGlyXSBpbiBfcGZfc2ZubWRfcmVhZGVyXFxuXFx0cmMgOj0gb2JqZWN0LmdldChpciwgXFxcIlJlYWRlckNvbmZpZ1xcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHJjKVxcblxcdG9iamVjdC5nZXQocmMsIFxcXCJDU1ZIZWFkZXJMb2NhdGlvblxcXCIsIG51bGwpID09IFxcXCJHSVZFTlxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocmMsIFxcXCJDU1ZIZWFkZXJzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFTTCBOZXh0L0RlZmF1bHQvQ2hvaWNlc1tdLk5leHQvQ2F0Y2hbXS5OZXh0IG11c3QgcmVmZXJlbmNlIGEgc3RhdGUgZGVmaW5lZCBpbiB0aGUgc2FtZSBTdGF0ZXMgYmxvY2ssIGF0IGV2ZXJ5IG5lc3RpbmcgbGV2ZWwgKGEgZGFuZ2xpbmcgU3RhcnRBdCBpcyBjb3ZlcmVkIGJ5IGVuZ2luZSBydWxlIEUzNjAxKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZubWlzc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGVtYWNoaW5lLXN0cnVjdHVyZS5odG1sXFxcIlxcblxcbl9wZl9zZm5taXNzX2ZpeCA6PSBcXFwiUG9pbnQgTmV4dC9EZWZhdWx0L0Nob2ljZXNbXS5OZXh0L0NhdGNoW10uTmV4dCBhdCBhIHN0YXRlIGRlZmluZWQgaW4gdGhlIHNhbWUgU3RhdGVzIGJsb2NrXFxcIlxcblxcbiMgW25hbWUsIHNjb3BlIHBhdGgsIHNjb3BlIHN0YXRlcywgc3RhdGUgbmFtZSwgZmllbGQgbGFiZWwsIHRhcmdldF1cXG5fcGZfc2ZubWlzc19yZWYgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBrZXksIHRhcmdldF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGtleSBpbiBbXFxcIk5leHRcXFwiLCBcXFwiRGVmYXVsdFxcXCJdXFxuXFx0dGFyZ2V0IDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcbn1cXG5cXG5fcGZfc2ZubWlzc19yZWYgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBrZXksIHRhcmdldF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGZpZWxkIGluIFtcXFwiQ2hvaWNlc1xcXCIsIFxcXCJDYXRjaFxcXCJdXFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoc3QsIGZpZWxkLCBbXSlcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0c29tZSBpLCBjIGluIGFyclxcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdGtleSA6PSBzcHJpbnRmKFxcXCIlc1slZF0uTmV4dFxcXCIsIFtmaWVsZCwgaV0pXFxufVxcblxcbiMgTk9URTogYSBkYW5nbGluZyBTdGFydEF0ICh0b3AgbGV2ZWwgYW5kIFBhcmFsbGVsIGJyYW5jaGVzKSBpcyBkZWxpYmVyYXRlbHlcXG4jIE5PVCBjaGVja2VkIGhlcmUg4oCUIHRoZSBlbmdpbmUncyBidWlsdC1pbiBFMzYwMSAoRVJST1IvQ0ZOX0xJTlQpIGNvdmVycyBpdFxcbiMgKHZlcmlmaWVkIGFnYWluc3QgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTA1KS4gQSBCcmFuY2ggbWF5IG5vdCB0cmFuc2l0aW9uIHRvXFxuIyBhIHN0YXRlIG91dHNpZGUgaXRzIG93biBTdGF0ZXMgYmxvY2sgZWl0aGVyOiB0aGUgc2VydmljZSBzY29wZXMgbmFtZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGtleV0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgcmVmZXJlbmNlcyBzdGF0ZSAnJXMnIHZpYSAlcywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWQgaW4gdGhlIHNhbWUgU3RhdGVzIGJsb2NrOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIk1JU1NJTkdfVFJBTlNJVElPTl9UQVJHRVQ6IE1pc3NpbmcgJ05leHQnIHRhcmdldDogJXNcXFxcXFxcIlxcXCIsIFtzbmFtZSwgdGFyZ2V0LCBrZXksIHRhcmdldF0pLFxcblxcdF9wZl9zZm5taXNzX2ZpeCwgX3BmX3Nmbm1pc3NfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIGtleSwgdGFyZ2V0XSBpbiBfcGZfc2ZubWlzc19yZWZcXG5cXHRub3QgdGFyZ2V0IGluIG9iamVjdC5rZXlzKHMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1uYW1lLWxpbWl0c1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVNMIHN0YXRlIG5hbWVzIGFyZSBhdCBtb3N0IDgwIGNoYXJhY3RlcnM7IGEgRGlzdHJpYnV0ZWQgTWFwIExhYmVsIGlzIGF0IG1vc3QgNDAgY2hhcmFjdGVycyBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgc3RhdGUgbWFjaGluZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2Zubm1fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3NlcnZpY2UtcXVvdGFzLmh0bWxcXFwiXFxuXFxuX3BmX3Nmbm5tX2ZpeCA6PSBcXFwiU2hvcnRlbiB0aGUgc3RhdGUgbmFtZSAvIExhYmVsOyBnaXZlIGVhY2ggRGlzdHJpYnV0ZWQgTWFwIGEgZGlzdGluY3QgTGFiZWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW5hbWUtbGltaXRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcInN0YXRlIG5hbWUgJyVzJyBpcyAlZCBjaGFyYWN0ZXJzIGxvbmcgKG1heGltdW0gODApOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIklOVkFMSURfU1RBVEVfTkFNRTogLi4uIGV4Y2VlZHMgdGhlIDgwLWNoYXJhY3RlciBsaW1pdCBhbGxvd2VkIGJ5IHRoZSBzZXJ2aWNlXFxcXFxcXCJcXFwiLCBbc25hbWUsIGNvdW50KHNuYW1lKV0pLFxcblxcdF9wZl9zZm5ubV9maXgsIF9wZl9zZm5ubV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0Y291bnQoc25hbWUpID4gODBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW5hbWUtbGltaXRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYWJlbFxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBMYWJlbCBpcyAlZCBjaGFyYWN0ZXJzIGxvbmcgKG1heGltdW0gNDApOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIklOVkFMSURfTEFCRUxfTkFNRTogLi4uIGV4Y2VlZHMgdGhlIDQwLWNoYXJhY3RlciBsaW1pdCBhbGxvd2VkIGJ5IHRoZSBzZXJ2aWNlXFxcXFxcXCJcXFwiLCBbc25hbWUsIGNvdW50KGwpXSksXFxuXFx0X3BmX3Nmbm5tX2ZpeCwgX3BmX3Nmbm5tX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRsIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJMYWJlbFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGwpXFxuXFx0Y291bnQobCkgPiA0MFxcbn1cXG5cXG5fcGZfc2Zubm1fbGFiZWwgY29udGFpbnMgW25hbWUsIHBhdGgsIGxdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0bCA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiTGFiZWxcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhsKVxcblxcdHBhdGggOj0gX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbmFtZS1saW1pdHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkxhYmVsXFxcIiwgW3BhdGgyXSksXFxuXFx0c3ByaW50ZihcXFwiTGFiZWwgJyVzJyBpcyB1c2VkIGJ5IGJvdGggJXMgYW5kICVzOyBNYXAgbGFiZWxzIG11c3QgYmUgdW5pcXVlLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJEVVBMSUNBVEVfTEFCRUxfTkFNRTogRHVwbGljYXRlIExhYmVsIG5hbWU6ICVzXFxcXFxcXCJcXFwiLCBbbCwgcGF0aDEsIHBhdGgyLCBsXSksXFxuXFx0X3BmX3Nmbm5tX2ZpeCwgX3BmX3Nmbm5tX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgxLCBsXSBpbiBfcGZfc2Zubm1fbGFiZWxcXG5cXHRzb21lIFtuMiwgcGF0aDIsIGwyXSBpbiBfcGZfc2Zubm1fbGFiZWxcXG5cXHRuMiA9PSBuYW1lXFxuXFx0bDIgPT0gbFxcblxcdHBhdGgxIDwgcGF0aDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW5leHQtZW5kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFRhc2svUGFzcy9XYWl0L1BhcmFsbGVsL01hcCBzdGF0ZSBjYXJyaWVzIGV4YWN0bHkgb25lIG9mIE5leHQgb3IgRW5kOiB0cnVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5uZV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGVtYWNoaW5lLXN0cnVjdHVyZS5odG1sXFxcIlxcblxcbl9wZl9zZm5uZV9maXggOj0gXFxcIktlZXAgZWl0aGVyIE5leHQgKHRyYW5zaXRpb24pIG9yIEVuZDogdHJ1ZSAodGVybWluYWwpIG9uIHRoZSBzdGF0ZSwgbmV2ZXIgYm90aCBhbmQgbmV2ZXIgbmVpdGhlclxcXCJcXG5cXG5fcGZfc2ZubmVfdHlwZXMgOj0ge1xcXCJUYXNrXFxcIiwgXFxcIlBhc3NcXFwiLCBcXFwiV2FpdFxcXCIsIFxcXCJQYXJhbGxlbFxcXCIsIFxcXCJNYXBcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1uZXh0LWVuZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0X3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGhhcyBib3RoIE5leHQgYW5kIEVuZDogdHJ1ZTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczogW05leHQsIEVuZF1cXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5uZV9maXgsIF9wZl9zZm5uZV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSBpbiBfcGZfc2ZubmVfdHlwZXNcXG5cXHRfcGZfc2ZubGliX2hhcyhzdCwgXFxcIk5leHRcXFwiKVxcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJFbmRcXFwiLCBmYWxzZSkgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbmV4dC1lbmRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBoYXMgbmVpdGhlciBOZXh0IG5vciBFbmQ6IHRydWUsIHNvIHRoZSBleGVjdXRpb24gY2Fubm90IGxlYXZlIGl0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhpcyBvYmplY3Qgc2hvdWxkIGhhdmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IFtOZXh0LCBFbmRdXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZubmVfZml4LCBfcGZfc2ZubmVfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgaW4gX3BmX3Nmbm5lX3R5cGVzXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiTmV4dFxcXCIpXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIkVuZFxcXCIsIGZhbHNlKSAhPSB0cnVlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1udW1lcmljLXJhbmdlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVNMIG51bWVyaWMgZmllbGRzIGhhdmUgc2VydmljZS1zaWRlIHJhbmdlcyB0aGUgc2NoZW1hIGRvZXMgbm90IGNhcnJ5OiBUaW1lb3V0U2Vjb25kcy9IZWFydGJlYXRTZWNvbmRzIDEuLjk5OTk5OTk5LCBXYWl0IFNlY29uZHMgMC4uOTk5OTk5OTksIE1heENvbmN1cnJlbmN5ID49IDAsIFRvbGVyYXRlZEZhaWx1cmVQZXJjZW50YWdlIDw9IDEwMCwgUmV0cnkgTWF4QXR0ZW1wdHMgMC4uOTk5OTk5OTksIEJhY2tvZmZSYXRlID49IDEuMCwgTWF4RGVsYXlTZWNvbmRzIDEuLjMxNjIyNDAwLCBhbmQgaW50ZWdlcnMgbXVzdCBiZSBudW1iZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5udW1fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlLXRhc2suaHRtbFxcXCJcXG5cXG5fcGZfc2ZubnVtX2ZpeCA6PSBcXFwiVXNlIGEgdmFsdWUgaW5zaWRlIHRoZSBkb2N1bWVudGVkIHJhbmdlIChKU09OYXRhIHN0YXRlcyBtYXkgdXNlIGEgeyUgJX0gZXhwcmVzc2lvbiBpbnN0ZWFkKVxcXCJcXG5cXG4jIE1lYXN1cmVkIHdpdGggVmFsaWRhdGVTdGF0ZU1hY2hpbmVEZWZpbml0aW9uIG9uIDIwMjYtMDktMDUuIFJldHJ5XFxuIyBJbnRlcnZhbFNlY29uZHMgMCBhbmQgdGhlIHRvcC1sZXZlbCBUaW1lb3V0U2Vjb25kcyAwIGFyZSBhY2NlcHRlZCwgc28gdGhleVxcbiMgYXJlIGRlbGliZXJhdGVseSBhYnNlbnQgaGVyZS5cXG5fcGZfc2ZubnVtX21pbiBjb250YWlucyBbXFxcIlRpbWVvdXRTZWNvbmRzXFxcIiwgMV1cXG5cXG5fcGZfc2ZubnVtX21pbiBjb250YWlucyBbXFxcIkhlYXJ0YmVhdFNlY29uZHNcXFwiLCAxXVxcblxcbl9wZl9zZm5udW1fbWluIGNvbnRhaW5zIFtcXFwiU2Vjb25kc1xcXCIsIDBdXFxuXFxuX3BmX3Nmbm51bV9taW4gY29udGFpbnMgW1xcXCJNYXhDb25jdXJyZW5jeVxcXCIsIDBdXFxuXFxuX3BmX3Nmbm51bV9tYXggY29udGFpbnMgW1xcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIDk5OTk5OTk5XVxcblxcbl9wZl9zZm5udW1fbWF4IGNvbnRhaW5zIFtcXFwiSGVhcnRiZWF0U2Vjb25kc1xcXCIsIDk5OTk5OTk5XVxcblxcbl9wZl9zZm5udW1fbWF4IGNvbnRhaW5zIFtcXFwiU2Vjb25kc1xcXCIsIDk5OTk5OTk5XVxcblxcbl9wZl9zZm5udW1fbWF4IGNvbnRhaW5zIFtcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCAxMDBdXFxuXFxuX3BmX3Nmbm51bV9ybWluIGNvbnRhaW5zIFtcXFwiTWF4QXR0ZW1wdHNcXFwiLCAwXVxcblxcbl9wZl9zZm5udW1fcm1pbiBjb250YWlucyBbXFxcIkJhY2tvZmZSYXRlXFxcIiwgMV1cXG5cXG5fcGZfc2ZubnVtX3JtaW4gY29udGFpbnMgW1xcXCJNYXhEZWxheVNlY29uZHNcXFwiLCAxXVxcblxcbl9wZl9zZm5udW1fcm1heCBjb250YWlucyBbXFxcIk1heEF0dGVtcHRzXFxcIiwgOTk5OTk5OTldXFxuXFxuX3BmX3Nmbm51bV9ybWF4IGNvbnRhaW5zIFtcXFwiTWF4RGVsYXlTZWNvbmRzXFxcIiwgMzE2MjI0MDBdXFxuXFxuX3BmX3Nmbm51bV9pbnQgOj0ge1xcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzXFxcIiwgXFxcIlNlY29uZHNcXFwiLCBcXFwiTWF4Q29uY3VycmVuY3lcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZUNvdW50XFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzIGlzICV2LCBiZWxvdyB0aGUgbWluaW11bSAldjsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IE1pbmltdW0gdmFsdWUgaXMgJXZcXFxcXFxcIlxcXCIsIFtzbmFtZSwgZiwgdiwgbSwgbV0pLFxcblxcdF9wZl9zZm5udW1fZml4LCBfcGZfc2ZubnVtX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFtmLCBtXSBpbiBfcGZfc2ZubnVtX21pblxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2IDwgbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzIGlzICV2LCBhYm92ZSB0aGUgbWF4aW11bSAldjsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IE1heGltdW0gdmFsdWUgaXMgJXZcXFxcXFxcIlxcXCIsIFtzbmFtZSwgZiwgdiwgbSwgbV0pLFxcblxcdF9wZl9zZm5udW1fZml4LCBfcGZfc2ZubnVtX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFtmLCBtXSBpbiBfcGZfc2ZubnVtX21heFxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2ID4gbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzIGlzIHRoZSBzdHJpbmcgJyVzJzsgdGhlIGZpZWxkIHRha2VzIGFuIGludGVnZXIgKG9yIGEgeyUlICUlfSBKU09OYXRhIGV4cHJlc3Npb24pLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IEV4cGVjdGVkIHZhbHVlIG9mIHR5cGUgSW50ZWdlclxcXFxcXFwiXFxcIiwgW3NuYW1lLCBmLCB2XSksXFxuXFx0X3BmX3Nmbm51bV9maXgsIF9wZl9zZm5udW1fdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUgZiBpbiBfcGZfc2ZubnVtX2ludFxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3Qgc3RhcnRzd2l0aCh2LCBcXFwieyVcXFwiKVxcblxcdG5vdCBjb250YWlucyh2LCBcXFwiJHtcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJldHJ5WyVkXS4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpLCBmXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBSZXRyeVslZF0gJXMgaXMgJXYsIGJlbG93IHRoZSBtaW5pbXVtICV2OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogTWluaW11bSB2YWx1ZSBpcyAldlxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBmLCB2LCBtLCBtXSksXFxuXFx0X3BmX3Nmbm51bV9maXgsIF9wZl9zZm5udW1fdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmV0cnlcXFwiLCBbXSlcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0c29tZSBpLCByIGluIGFyclxcblxcdGlzX29iamVjdChyKVxcblxcdHNvbWUgW2YsIG1dIGluIF9wZl9zZm5udW1fcm1pblxcblxcdHYgOj0gb2JqZWN0LmdldChyLCBmLCBudWxsKVxcblxcdGlzX251bWJlcih2KVxcblxcdHYgPCBtXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1udW1lcmljLXJhbmdlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmV0cnlbJWRdLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIFJldHJ5WyVkXSAlcyBpcyAldiwgYWJvdmUgdGhlIG1heGltdW0gJXY7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBNYXhpbXVtIHZhbHVlIGlzICV2XFxcXFxcXCJcXFwiLCBbc25hbWUsIGksIGYsIHYsIG0sIG1dKSxcXG5cXHRfcGZfc2ZubnVtX2ZpeCwgX3BmX3Nmbm51bV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJSZXRyeVxcXCIsIFtdKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRzb21lIGksIHIgaW4gYXJyXFxuXFx0aXNfb2JqZWN0KHIpXFxuXFx0c29tZSBbZiwgbV0gaW4gX3BmX3Nmbm51bV9ybWF4XFxuXFx0diA6PSBvYmplY3QuZ2V0KHIsIGYsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA+IG1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLXBhdGgtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHN0YXRpYyBBU0wgZmllbGQgYW5kIGl0cyBQYXRoIHZhcmlhbnQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAoVGltZW91dFNlY29uZHMvVGltZW91dFNlY29uZHNQYXRoLCBIZWFydGJlYXRTZWNvbmRzL0hlYXJ0YmVhdFNlY29uZHNQYXRoLCBNYXhDb25jdXJyZW5jeS9NYXhDb25jdXJyZW5jeVBhdGgsIFRvbGVyYXRlZEZhaWx1cmVQZXJjZW50YWdlLy1QYXRoLCBFcnJvci9FcnJvclBhdGgsIENhdXNlL0NhdXNlUGF0aCksIGFuZCBhIE1hcCBzdGF0ZSBoYXMgZXhhY3RseSBvbmUgb2YgSXRlbVByb2Nlc3NvciAvIEl0ZXJhdG9yXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5weF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGUtdGFzay5odG1sXFxcIlxcblxcbl9wZl9zZm5weF9maXggOj0gXFxcIktlZXAgZWl0aGVyIHRoZSBzdGF0aWMgZmllbGQgb3IgaXRzIFBhdGggdmFyaWFudDsgZ2l2ZSBhIE1hcCBzdGF0ZSBvbmUgSXRlbVByb2Nlc3NvciAoSXRlcmF0b3IgaXMgdGhlIGxlZ2FjeSBzcGVsbGluZylcXFwiXFxuXFxuX3BmX3NmbnB4X3BhaXIgY29udGFpbnMgW1xcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1BhdGhcXFwiXVxcblxcbl9wZl9zZm5weF9wYWlyIGNvbnRhaW5zIFtcXFwiSGVhcnRiZWF0U2Vjb25kc1xcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzUGF0aFxcXCJdXFxuXFxuX3BmX3NmbnB4X3BhaXIgY29udGFpbnMgW1xcXCJNYXhDb25jdXJyZW5jeVxcXCIsIFxcXCJNYXhDb25jdXJyZW5jeVBhdGhcXFwiXVxcblxcbl9wZl9zZm5weF9wYWlyIGNvbnRhaW5zIFtcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VQYXRoXFxcIl1cXG5cXG5fcGZfc2ZucHhfcGFpciBjb250YWlucyBbXFxcIkVycm9yXFxcIiwgXFxcIkVycm9yUGF0aFxcXCJdXFxuXFxuX3BmX3NmbnB4X3BhaXIgY29udGFpbnMgW1xcXCJDYXVzZVxcXCIsIFxcXCJDYXVzZVBhdGhcXFwiXVxcblxcbl9wZl9zZm5weF9wYWlyIGNvbnRhaW5zIFtcXFwiSXRlbVByb2Nlc3NvclxcXCIsIFxcXCJJdGVyYXRvclxcXCJdXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXBhdGgtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBiXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBzZXRzIGJvdGggJXMgYW5kICVzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOiBbJXMsICVzXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBhLCBiLCBhLCBiXSksXFxuXFx0X3BmX3NmbnB4X2ZpeCwgX3BmX3NmbnB4X3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFthLCBiXSBpbiBfcGZfc2ZucHhfcGFpclxcblxcdF9wZl9zZm5saWJfaGFzKHN0LCBhKVxcblxcdF9wZl9zZm5saWJfaGFzKHN0LCBiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcGF0aC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgaGFzIG5laXRoZXIgSXRlbVByb2Nlc3NvciBub3IgSXRlcmF0b3I7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGlzIG9iamVjdCBzaG91bGQgaGF2ZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczogW0l0ZW1Qcm9jZXNzb3IsIEl0ZXJhdG9yXVxcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3NmbnB4X2ZpeCwgX3BmX3NmbnB4X3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpID09IFxcXCJNYXBcXFwiXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiSXRlbVByb2Nlc3NvclxcXCIpXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiSXRlcmF0b3JcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtcXVlcnktbGFuZ3VhZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpTT05QYXRoLW9ubHkgZmllbGRzIChJbnB1dFBhdGgsIE91dHB1dFBhdGgsIFJlc3VsdFBhdGgsIFBhcmFtZXRlcnMsIFJlc3VsdFNlbGVjdG9yLCBSZXN1bHQsICpQYXRoLCBWYXJpYWJsZSBydWxlcykgYW5kIEpTT05hdGEtb25seSBmaWVsZHMgKEFyZ3VtZW50cywgT3V0cHV0LCBJdGVtcywgQ29uZGl0aW9uKSBtdXN0IG1hdGNoIHRoZSBlZmZlY3RpdmUgUXVlcnlMYW5ndWFnZTsgYSBKU09OYXRhIHN0YXRlIG1hY2hpbmUgY2Fubm90IGNvbnRhaW4gSlNPTlBhdGggc3RhdGVzOyB7JSBtdXN0IGNsb3NlIHdpdGggJX1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbnFsX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy90cmFuc2Zvcm1pbmctZGF0YS5odG1sXFxcIlxcblxcbl9wZl9zZm5xbF9maXggOj0gXFxcIlVzZSBBcmd1bWVudHMvT3V0cHV0L0l0ZW1zL0NvbmRpdGlvbiBpbiBKU09OYXRhIHN0YXRlcyBhbmQgdGhlIFBhdGgtc3R5bGUgZmllbGRzIGluIEpTT05QYXRoIHN0YXRlczsgc2V0IFF1ZXJ5TGFuZ3VhZ2UgY29uc2lzdGVudGx5XFxcIlxcblxcbl9wZl9zZm5xbF9wYXRob25seSA6PSB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJSZXN1bHRTZWxlY3RvclxcXCIsIFxcXCJSZXN1bHRcXFwiLCBcXFwiSXRlbXNQYXRoXFxcIiwgXFxcIlRpbWVvdXRTZWNvbmRzUGF0aFxcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzUGF0aFxcXCIsIFxcXCJTZWNvbmRzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBQYXRoXFxcIiwgXFxcIk1heENvbmN1cnJlbmN5UGF0aFxcXCIsIFxcXCJUb2xlcmF0ZWRGYWlsdXJlUGVyY2VudGFnZVBhdGhcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZUNvdW50UGF0aFxcXCIsIFxcXCJFcnJvclBhdGhcXFwiLCBcXFwiQ2F1c2VQYXRoXFxcIn1cXG5cXG5fcGZfc2ZucWxfanNvbmF0YW9ubHkgOj0ge1xcXCJBcmd1bWVudHNcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkl0ZW1zXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcXVlcnktbGFuZ3VhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIHVzZXMgSlNPTmF0YSBidXQgaGFzIHRoZSBKU09OUGF0aC1vbmx5IGZpZWxkICclcyc7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgUXVlcnlMYW5ndWFnZSBpcyBzZXQgdG8gJ0pTT05hdGEnLCBidXQgZmllbGQgJyVzJyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlICdKU09OUGF0aCcgUXVlcnlMYW5ndWFnZVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBmLCBmXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTmF0YVxcXCJcXG5cXHRzb21lIGYsIF8gaW4gc3RcXG5cXHRmIGluIF9wZl9zZm5xbF9wYXRob25seVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcXVlcnktbGFuZ3VhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIHVzZXMgSlNPTlBhdGggYnV0IGhhcyB0aGUgSlNPTmF0YS1vbmx5IGZpZWxkICclcyc7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgUXVlcnlMYW5ndWFnZSBpcyBzZXQgdG8gJ0pTT05QYXRoJywgYnV0IGZpZWxkICclcycgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSAnSlNPTmF0YScgUXVlcnlMYW5ndWFnZVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBmLCBmXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTlBhdGhcXFwiXFxuXFx0c29tZSBmLCBfIGluIHN0XFxuXFx0ZiBpbiBfcGZfc2ZucWxfanNvbmF0YW9ubHlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCB1c2VzIFZhcmlhYmxlL2NvbXBhcmlzb24gZmllbGRzIGluIGEgSlNPTmF0YSBzdGF0ZTsgSlNPTmF0YSBydWxlcyB0YWtlIENvbmRpdGlvbiwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiAuLi4gZmllbGQgJ1ZhcmlhYmxlJyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlICdKU09OUGF0aCcgUXVlcnlMYW5ndWFnZVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdHN0IDo9IHNbc25hbWVdXFxuXFx0X3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgPT0gXFxcIkpTT05hdGFcXFwiXFxuXFx0X3BmX3NmbmxpYl9oYXMoYywgXFxcIlZhcmlhYmxlXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCB1c2VzIENvbmRpdGlvbiBpbiBhIEpTT05QYXRoIHN0YXRlOyBKU09OUGF0aCBydWxlcyB0YWtlIFZhcmlhYmxlIHBsdXMgYSBjb21wYXJpc29uLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IC4uLiBmaWVsZCAnQ29uZGl0aW9uJyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlICdKU09OYXRhJyBRdWVyeUxhbmd1YWdlXFxcXFxcXCJcXFwiLCBbc25hbWUsIGldKSxcXG5cXHRfcGZfc2ZucWxfZml4LCBfcGZfc2ZucWxfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIGksIGNdIGluIF9wZl9zZm5saWJfY2hvaWNlXFxuXFx0c3QgOj0gc1tzbmFtZV1cXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTlBhdGhcXFwiXFxuXFx0X3BmX3NmbmxpYl9oYXMoYywgXFxcIkNvbmRpdGlvblxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1xdWVyeS1sYW5ndWFnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUXVlcnlMYW5ndWFnZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBzZXRzIFF1ZXJ5TGFuZ3VhZ2UgSlNPTlBhdGggaW5zaWRlIGEgc3RhdGUgbWFjaGluZSB3aG9zZSB0b3AtbGV2ZWwgUXVlcnlMYW5ndWFnZSBpcyBKU09OYXRhOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogJ1F1ZXJ5TGFuZ3VhZ2UnIGNhbiBub3QgYmUgJ0pTT05QYXRoJyBpZiBzZXQgdG8gJ0pTT05hdGEnIGZvciB3aG9sZSBzdGF0ZSBtYWNoaW5lXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZucWxfZml4LCBfcGZfc2ZucWxfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoX3BmX3NmbmxpYl9hc2wobmFtZSksIFxcXCJRdWVyeUxhbmd1YWdlXFxcIiwgbnVsbCkgPT0gXFxcIkpTT05hdGFcXFwiXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBudWxsKSA9PSBcXFwiSlNPTlBhdGhcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1xdWVyeS1sYW5ndWFnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUXVlcnlMYW5ndWFnZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBRdWVyeUxhbmd1YWdlICclcycgaXMgbm90IEpTT05QYXRoIG9yIEpTT05hdGE7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFtKU09OUGF0aCwgSlNPTmF0YV1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgcV0pLFxcblxcdF9wZl9zZm5xbF9maXgsIF9wZl9zZm5xbF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0cSA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUXVlcnlMYW5ndWFnZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHEpXFxuXFx0bm90IHEgaW4ge1xcXCJKU09OUGF0aFxcXCIsIFxcXCJKU09OYXRhXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5RdWVyeUxhbmd1YWdlXFxcIiwgW19wZl9zZm5saWJfcHJvcChuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcInRvcC1sZXZlbCBRdWVyeUxhbmd1YWdlICclcycgaXMgbm90IEpTT05QYXRoIG9yIEpTT05hdGE7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFtKU09OUGF0aCwgSlNPTmF0YV1cXFxcXFxcIlxcXCIsIFtxXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdHEgOj0gb2JqZWN0LmdldChfcGZfc2ZubGliX2FzbChuYW1lKSwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhxKVxcblxcdG5vdCBxIGluIHtcXFwiSlNPTlBhdGhcXFwiLCBcXFwiSlNPTmF0YVxcXCJ9XFxufVxcblxcbiMgU3RyaW5nIHZhbHVlcyBvZiBhIEpTT05hdGEgc3RhdGUsIHVwIHRvIHR3byBsZXZlbHMgaW5zaWRlIG9iamVjdC9hcnJheVxcbiMgZmllbGRzIChBcmd1bWVudHMsIE91dHB1dCwgQXNzaWduLCBJdGVtU2VsZWN0b3IsIENob2ljZXNbXS5Db25kaXRpb24gLi4uKS5cXG5fcGZfc2ZucWxfc3RyIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgd2hlcmUsIHZdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0X3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgPT0gXFxcIkpTT05hdGFcXFwiXFxuXFx0c29tZSBmLCB2IGluIHN0XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0d2hlcmUgOj0gZlxcbn1cXG5cXG4jIEl0ZXJhdGluZyBhIHNjYWxhciB3aXRoIGBzb21lIC4uIGluYCBpcyBhIGhhcmQgZXZhbHVhdGlvbiBlcnJvciBpbiB0aGlzXFxuIyBlbmdpbmUgKG5vdCB1bmRlZmluZWQpLCBzbyBldmVyeSBuZXN0ZWQgdmFsdWUgaXMgdHlwZS1ndWFyZGVkIGZpcnN0Llxcbl9wZl9zZm5xbF9jb2xsKHgpIGlmIGlzX29iamVjdCh4KVxcblxcbl9wZl9zZm5xbF9jb2xsKHgpIGlmIGlzX2FycmF5KHgpXFxuXFxuX3BmX3NmbnFsX3N0ciBjb250YWlucyBbbmFtZSwgcCwgc25hbWUsIHdoZXJlLCB2XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdF9wZl9zZm5saWJfcWwobmFtZSwgc3QpID09IFxcXCJKU09OYXRhXFxcIlxcblxcdHNvbWUgZiwgbyBpbiBzdFxcblxcdF9wZl9zZm5xbF9jb2xsKG8pXFxuXFx0c29tZSBrLCB2IGluIG9cXG5cXHRpc19zdHJpbmcodilcXG5cXHR3aGVyZSA6PSBzcHJpbnRmKFxcXCIlcy4ldlxcXCIsIFtmLCBrXSlcXG59XFxuXFxuX3BmX3NmbnFsX3N0ciBjb250YWlucyBbbmFtZSwgcCwgc25hbWUsIHdoZXJlLCB2XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdF9wZl9zZm5saWJfcWwobmFtZSwgc3QpID09IFxcXCJKU09OYXRhXFxcIlxcblxcdHNvbWUgZiwgbyBpbiBzdFxcblxcdF9wZl9zZm5xbF9jb2xsKG8pXFxuXFx0c29tZSBrLCBvMiBpbiBvXFxuXFx0X3BmX3NmbnFsX2NvbGwobzIpXFxuXFx0c29tZSBrMiwgdiBpbiBvMlxcblxcdGlzX3N0cmluZyh2KVxcblxcdHdoZXJlIDo9IHNwcmludGYoXFxcIiVzLiV2LiV2XFxcIiwgW2YsIGssIGsyXSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCB3aGVyZV0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgJXMgdmFsdWUgJyVzJyBvcGVucyBhIEpTT05hdGEgZXhwcmVzc2lvbiB3aXRoIHslJSBidXQgZG9lcyBub3QgY2xvc2UgaXQgd2l0aCAlJX07IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBKU09OYXRhIHN0cmluZyBtdXN0IHN0YXJ0IHdpdGggeyUlIGFuZCBlbmQgd2l0aCAlJX1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgd2hlcmUsIHZdKSxcXG5cXHRfcGZfc2ZucWxfZml4LCBfcGZfc2ZucWxfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIHdoZXJlLCB2XSBpbiBfcGZfc2ZucWxfc3RyXFxuXFx0c3RhcnRzd2l0aCh2LCBcXFwieyVcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh2LCBcXFwiJX1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtcmVzb3VyY2UtYXJuXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXNrIFJlc291cmNlIGlzIGFuIEFSTiwgYW5kIGFuIGludGVncmF0aW9uIHBhdHRlcm4gdGhlIHNlcnZpY2UgZG9lcyBub3Qgb2ZmZXIgZmFpbHMgY3JlYXRpb246IC5zeW5jIG9uIExhbWJkYS9TTlMvU1FTL0R5bmFtb0RCL0V2ZW50QnJpZGdlL0FQSSBHYXRld2F5L2F3cy1zZGssIC53YWl0Rm9yVGFza1Rva2VuIG9uIEF0aGVuYS9CYXRjaC9Db2RlQnVpbGQvRU1SL0dsdWUvRGF0YUJyZXcvTWVkaWFDb252ZXJ0L1NhZ2VNYWtlci9EeW5hbW9EQiwgYW5kIC5zeW5jOjIgYW55d2hlcmUgYnV0IHN0YXRlczpzdGFydEV4ZWN1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZucmVzX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9pbnRlZ3JhdGUtb3B0aW1pemVkLmh0bWxcXFwiXFxuXFxuX3BmX3NmbnJlc19maXggOj0gXFxcIlVzZSB0aGUgaW50ZWdyYXRpb24gcGF0dGVybiB0aGUgc2VydmljZSBzdXBwb3J0cyAoc2VlIHRoZSBvcHRpbWl6ZWQgaW50ZWdyYXRpb25zIHRhYmxlKTsgYSBMYW1iZGEgY2FsbCB3YWl0cyBmb3IgdGhlIGZ1bmN0aW9uIGFueXdheSAobm8gLnN5bmMpXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1yZXNvdXJjZS1hcm5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJlc291cmNlXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSldKSxcXG5cXHRzcHJpbnRmKFxcXCJUYXNrIHN0YXRlICclcycgUmVzb3VyY2UgJyVzJyBpcyBub3QgYW4gQVJOOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgaXMgbm90IGEgdmFsaWQgcmVzb3VyY2UgQVJOXFxcXFxcXCJcXFwiLCBbc25hbWUsIHJlc10pLFxcblxcdF9wZl9zZm5yZXNfZml4LCBfcGZfc2ZucmVzX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpID09IFxcXCJUYXNrXFxcIlxcblxcdHJlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmVzb3VyY2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyZXMpXFxuXFx0bm90IGNvbnRhaW5zKHJlcywgXFxcIiR7XFxcIilcXG5cXHRub3Qgc3RhcnRzd2l0aChyZXMsIFxcXCJhcm46XFxcIilcXG59XFxuXFxuIyBTZXJ2aWNlcyB3aG9zZSBvcHRpbWl6ZWQgaW50ZWdyYXRpb24gbmV2ZXIgb2ZmZXJzIHRoZSBwYXR0ZXJuIChkb2MgdGFibGUsXFxuIyBjb25maXJtZWQgd2l0aCBWYWxpZGF0ZVN0YXRlTWFjaGluZURlZmluaXRpb24gb24gMjAyNi0wOS0wNSkuIFN1cHBvcnQgb24gdGhlXFxuIyBwb3NpdGl2ZSBzaWRlIGlzIHBlciBBUEksIHNvIG9ubHkgdGhlIGltcG9zc2libGUgY29tYmluYXRpb25zIGFyZSBqdWRnZWQuXFxuX3BmX3NmbnJlc19ub3N5bmMgOj0ge1xcXCJsYW1iZGFcXFwiLCBcXFwic25zXFxcIiwgXFxcInNxc1xcXCIsIFxcXCJkeW5hbW9kYlxcXCIsIFxcXCJldmVudHNcXFwiLCBcXFwiYXBpZ2F0ZXdheVxcXCIsIFxcXCJhd3Mtc2RrXFxcIiwgXFxcImJlZHJvY2stYWdlbnRjb3JlXFxcIn1cXG5cXG5fcGZfc2ZucmVzX25vdG9rZW4gOj0ge1xcXCJhdGhlbmFcXFwiLCBcXFwiYmF0Y2hcXFwiLCBcXFwiY29kZWJ1aWxkXFxcIiwgXFxcImVsYXN0aWNtYXByZWR1Y2VcXFwiLCBcXFwiZW1yLWNvbnRhaW5lcnNcXFwiLCBcXFwiZW1yLXNlcnZlcmxlc3NcXFwiLCBcXFwiZ2x1ZVxcXCIsIFxcXCJkYXRhYnJld1xcXCIsIFxcXCJtZWRpYWNvbnZlcnRcXFwiLCBcXFwic2FnZW1ha2VyXFxcIiwgXFxcImR5bmFtb2RiXFxcIiwgXFxcImJlZHJvY2stYWdlbnRjb3JlXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmVzb3VyY2UtYXJuXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZXNvdXJjZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiVGFzayBzdGF0ZSAnJXMnIHVzZXMgdGhlIC5zeW5jIChSdW4gYSBKb2IpIHBhdHRlcm4gb24gdGhlICVzIGludGVncmF0aW9uLCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGl0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlIHJlc291cmNlIHByb3ZpZGVkIGFybjphd3M6c3RhdGVzOjo6JXM6JXMgaXMgbm90IHJlY29nbml6ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZSwgc3ZjLCBzdmMsIGFwaV0pLFxcblxcdF9wZl9zZm5yZXNfZml4LCBfcGZfc2ZucmVzX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdCwgc3ZjLCBhcGldIGluIF9wZl9zZm5saWJfaW50ZWdyYXRpb25cXG5cXHRzdmMgaW4gX3BmX3NmbnJlc19ub3N5bmNcXG5cXHRyZWdleC5tYXRjaChcXFwiWy5dc3luYyg6Mik/JFxcXCIsIGFwaSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXJlc291cmNlLWFyblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmVzb3VyY2VcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIlRhc2sgc3RhdGUgJyVzJyB1c2VzIHRoZSAud2FpdEZvclRhc2tUb2tlbiAoY2FsbGJhY2spIHBhdHRlcm4gb24gdGhlICVzIGludGVncmF0aW9uLCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGl0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlIHJlc291cmNlIHByb3ZpZGVkIGFybjphd3M6c3RhdGVzOjo6JXM6JXMgaXMgbm90IHJlY29nbml6ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZSwgc3ZjLCBzdmMsIGFwaV0pLFxcblxcdF9wZl9zZm5yZXNfZml4LCBfcGZfc2ZucmVzX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdCwgc3ZjLCBhcGldIGluIF9wZl9zZm5saWJfaW50ZWdyYXRpb25cXG5cXHRzdmMgaW4gX3BmX3NmbnJlc19ub3Rva2VuXFxuXFx0ZW5kc3dpdGgoYXBpLCBcXFwiLndhaXRGb3JUYXNrVG9rZW5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmVzb3VyY2UtYXJuXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZXNvdXJjZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiVGFzayBzdGF0ZSAnJXMnIHVzZXMgLnN5bmM6MiBvbiAlczolczsgb25seSBzdGF0ZXM6c3RhcnRFeGVjdXRpb24uc3luYzoyIGV4aXN0cywgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgcmVzb3VyY2UgcHJvdmlkZWQgLi4uIGlzIG5vdCByZWNvZ25pemVkXFxcXFxcXCJcXFwiLCBbc25hbWUsIHN2YywgYXBpXSksXFxuXFx0X3BmX3NmbnJlc19maXgsIF9wZl9zZm5yZXNfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0LCBzdmMsIGFwaV0gaW4gX3BmX3NmbmxpYl9pbnRlZ3JhdGlvblxcblxcdGVuZHN3aXRoKGFwaSwgXFxcIi5zeW5jOjJcXFwiKVxcblxcdHN2YyAhPSBcXFwic3RhdGVzXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJldHJ5L0NhdGNoIGVudHJpZXM6IEVycm9yRXF1YWxzIGlzIHByZXNlbnQgYW5kIG5vbi1lbXB0eSwgU3RhdGVzLkFMTCBhcHBlYXJzIGFsb25lIGFuZCBvbmx5IGluIHRoZSBsYXN0IGVudHJ5LCBldmVyeSBDYXRjaCBoYXMgTmV4dCwgYW5kIEppdHRlclN0cmF0ZWd5IGlzIE5PTkUgb3IgRlVMTFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZucmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2NvbmNlcHRzLWVycm9yLWhhbmRsaW5nLmh0bWxcXFwiXFxuXFxuX3BmX3NmbnJjX2ZpeCA6PSBcXFwiTW92ZSB0aGUgU3RhdGVzLkFMTCBjYXRjaC1hbGwgdG8gdGhlIGxhc3QgZW50cnkgYnkgaXRzZWxmOyBnaXZlIGV2ZXJ5IGNhdGNoZXIgYSBOZXh0XFxcIlxcblxcbiMgW25hbWUsIHBhdGgsIHN0YXRlIG5hbWUsIGZpZWxkLCBpbmRleCwgZW50cnksIGVudHJpZXMgY291bnRdXFxuX3BmX3NmbnJjX2VudHJ5IGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgZmllbGQsIGksIGUsIG5dIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmaWVsZCBpbiBbXFxcIlJldHJ5XFxcIiwgXFxcIkNhdGNoXFxcIl1cXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgZmllbGQsIG51bGwpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG4gOj0gY291bnQoYXJyKVxcblxcdHNvbWUgaSwgZSBpbiBhcnJcXG5cXHRpc19vYmplY3QoZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXJldHJ5LWNhdGNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1slZF1cXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgZmllbGQsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzWyVkXSBoYXMgbm8gRXJyb3JFcXVhbHM7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbRXJyb3JFcXVhbHNdXFxcXFxcXCJcXFwiLCBbc25hbWUsIGZpZWxkLCBpXSksXFxuXFx0X3BmX3NmbnJjX2ZpeCwgX3BmX3NmbnJjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBmaWVsZCwgaSwgZSwgX10gaW4gX3BmX3NmbnJjX2VudHJ5XFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKGUsIFxcXCJFcnJvckVxdWFsc1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1yZXRyeS1jYXRjaFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNbJWRdLkVycm9yRXF1YWxzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZpZWxkLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyAlc1slZF0gaGFzIGFuIGVtcHR5IEVycm9yRXF1YWxzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLCBbc25hbWUsIGZpZWxkLCBpXSksXFxuXFx0X3BmX3NmbnJjX2ZpeCwgX3BmX3NmbnJjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBmaWVsZCwgaSwgZSwgX10gaW4gX3BmX3NmbnJjX2VudHJ5XFxuXFx0ZWUgOj0gb2JqZWN0LmdldChlLCBcXFwiRXJyb3JFcXVhbHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGVlKVxcblxcdGNvdW50KGVlKSA9PSAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1yZXRyeS1jYXRjaFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNbJWRdLkVycm9yRXF1YWxzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZpZWxkLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyAlc1slZF0gbGlzdHMgU3RhdGVzLkFMTCB0b2dldGhlciB3aXRoIG90aGVyIGVycm9yIG5hbWVzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogU3RhdGVzLkFMTCBtdXN0IGFwcGVhciBhbG9uZSBhbmQgYXQgZW5kIG9mIGxpc3RcXFxcXFxcIlxcXCIsIFtzbmFtZSwgZmllbGQsIGldKSxcXG5cXHRfcGZfc2ZucmNfZml4LCBfcGZfc2ZucmNfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIGZpZWxkLCBpLCBlLCBfXSBpbiBfcGZfc2ZucmNfZW50cnlcXG5cXHRlZSA6PSBvYmplY3QuZ2V0KGUsIFxcXCJFcnJvckVxdWFsc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoZWUpXFxuXFx0XFxcIlN0YXRlcy5BTExcXFwiIGluIGVlXFxuXFx0Y291bnQoZWUpID4gMVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzWyVkXS5FcnJvckVxdWFsc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBmaWVsZCwgaV0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgJXNbJWRdIGNhdGNoZXMgU3RhdGVzLkFMTCBidXQgaXMgbm90IHRoZSBsYXN0IGVudHJ5ICglZCBlbnRyaWVzKTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFN0YXRlcy5BTEwgbXVzdCBhcHBlYXIgYWxvbmUgYW5kIGF0IGVuZCBvZiBsaXN0XFxcXFxcXCJcXFwiLCBbc25hbWUsIGZpZWxkLCBpLCBuXSksXFxuXFx0X3BmX3NmbnJjX2ZpeCwgX3BmX3NmbnJjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBmaWVsZCwgaSwgZSwgbl0gaW4gX3BmX3NmbnJjX2VudHJ5XFxuXFx0ZWUgOj0gb2JqZWN0LmdldChlLCBcXFwiRXJyb3JFcXVhbHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGVlKVxcblxcdFxcXCJTdGF0ZXMuQUxMXFxcIiBpbiBlZVxcblxcdGkgPCBuIC0gMVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhdGNoWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBDYXRjaFslZF0gaGFzIG5vIE5leHQ7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbTmV4dF1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgaV0pLFxcblxcdF9wZl9zZm5yY19maXgsIF9wZl9zZm5yY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwgZmllbGQsIGksIGUsIF9dIGluIF9wZl9zZm5yY19lbnRyeVxcblxcdGZpZWxkID09IFxcXCJDYXRjaFxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoZSwgXFxcIk5leHRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJldHJ5WyVkXS5KaXR0ZXJTdHJhdGVneVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBSZXRyeVslZF0gSml0dGVyU3RyYXRlZ3kgJyVzJyBpcyBub3QgTk9ORSBvciBGVUxMOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBbTk9ORSwgRlVMTF1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgaSwgal0pLFxcblxcdF9wZl9zZm5yY19maXgsIF9wZl9zZm5yY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwgZmllbGQsIGksIGUsIF9dIGluIF9wZl9zZm5yY19lbnRyeVxcblxcdGZpZWxkID09IFxcXCJSZXRyeVxcXCJcXG5cXHRqIDo9IG9iamVjdC5nZXQoZSwgXFxcIkppdHRlclN0cmF0ZWd5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoailcXG5cXHRub3QgaiBpbiB7XFxcIk5PTkVcXFwiLCBcXFwiRlVMTFxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1zdGF0ZS1maWVsZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFTTCBmaWVsZHMgYXJlIHBlciBzdGF0ZSB0eXBlOiBhIGtub3duIGZpZWxkIHBsYWNlZCBvbiBhIHR5cGUgdGhhdCBkb2VzIG5vdCBhY2NlcHQgaXQgKFJldHJ5IG9uIFBhc3MsIEVuZCBvbiBDaG9pY2UsIE5leHQgb24gRmFpbCwgLi4uKSBmYWlscyBjcmVhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuZmxkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZW1hY2hpbmUtc3RydWN0dXJlLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmZsZF9maXggOj0gXFxcIlJlbW92ZSB0aGUgZmllbGQgb3IgbW92ZSB0aGUgbG9naWMgdG8gYSBzdGF0ZSB0eXBlIHRoYXQgc3VwcG9ydHMgaXQgKHNlZSB0aGUgQVNMIHN0YXRlIHBhZ2VzKVxcXCJcXG5cXG4jIE1lYXN1cmVkIHdpdGggVmFsaWRhdGVTdGF0ZU1hY2hpbmVEZWZpbml0aW9uIG9uIDIwMjYtMDktMDUgKDggdHlwZXMgeCA1MFxcbiMgZmllbGRzKS4gVHlwZS9Db21tZW50L1F1ZXJ5TGFuZ3VhZ2UgYXJlIGFjY2VwdGVkIGV2ZXJ5d2hlcmUuXFxuX3BmX3NmbmZsZF9jb21tb24gOj0ge1xcXCJUeXBlXFxcIiwgXFxcIkNvbW1lbnRcXFwiLCBcXFwiUXVlcnlMYW5ndWFnZVxcXCJ9XFxuXFxuX3BmX3NmbmZsZF9hbGxvd2VkIDo9IHtcXG5cXHRcXFwiUGFzc1xcXCI6IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiUmVzdWx0XFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJPdXRwdXRcXFwiLCBcXFwiQXNzaWduXFxcIiwgXFxcIk5leHRcXFwiLCBcXFwiRW5kXFxcIn0sXFxuXFx0XFxcIlRhc2tcXFwiOiB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJBcmd1bWVudHNcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkFzc2lnblxcXCIsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJDcmVkZW50aWFsc1xcXCIsIFxcXCJSZXN1bHRTZWxlY3RvclxcXCIsIFxcXCJSZXRyeVxcXCIsIFxcXCJDYXRjaFxcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1BhdGhcXFwiLCBcXFwiSGVhcnRiZWF0U2Vjb25kc1xcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzUGF0aFxcXCIsIFxcXCJOZXh0XFxcIiwgXFxcIkVuZFxcXCJ9LFxcblxcdFxcXCJXYWl0XFxcIjoge1xcXCJJbnB1dFBhdGhcXFwiLCBcXFwiT3V0cHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRcXFwiLCBcXFwiQXNzaWduXFxcIiwgXFxcIlNlY29uZHNcXFwiLCBcXFwiVGltZXN0YW1wXFxcIiwgXFxcIlNlY29uZHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcFBhdGhcXFwiLCBcXFwiTmV4dFxcXCIsIFxcXCJFbmRcXFwifSxcXG5cXHRcXFwiUGFyYWxsZWxcXFwiOiB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJBcmd1bWVudHNcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkFzc2lnblxcXCIsIFxcXCJSZXN1bHRTZWxlY3RvclxcXCIsIFxcXCJSZXRyeVxcXCIsIFxcXCJDYXRjaFxcXCIsIFxcXCJCcmFuY2hlc1xcXCIsIFxcXCJOZXh0XFxcIiwgXFxcIkVuZFxcXCJ9LFxcblxcdFxcXCJNYXBcXFwiOiB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJPdXRwdXRcXFwiLCBcXFwiQXNzaWduXFxcIiwgXFxcIlJlc3VsdFNlbGVjdG9yXFxcIiwgXFxcIlJldHJ5XFxcIiwgXFxcIkNhdGNoXFxcIiwgXFxcIkl0ZW1Qcm9jZXNzb3JcXFwiLCBcXFwiSXRlcmF0b3JcXFwiLCBcXFwiSXRlbXNQYXRoXFxcIiwgXFxcIkl0ZW1zXFxcIiwgXFxcIkl0ZW1TZWxlY3RvclxcXCIsIFxcXCJJdGVtUmVhZGVyXFxcIiwgXFxcIkl0ZW1CYXRjaGVyXFxcIiwgXFxcIlJlc3VsdFdyaXRlclxcXCIsIFxcXCJNYXhDb25jdXJyZW5jeVxcXCIsIFxcXCJNYXhDb25jdXJyZW5jeVBhdGhcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VQYXRoXFxcIiwgXFxcIlRvbGVyYXRlZEZhaWx1cmVDb3VudFxcXCIsIFxcXCJUb2xlcmF0ZWRGYWlsdXJlQ291bnRQYXRoXFxcIiwgXFxcIkxhYmVsXFxcIiwgXFxcIk5leHRcXFwiLCBcXFwiRW5kXFxcIn0sXFxuXFx0XFxcIkNob2ljZVxcXCI6IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkFzc2lnblxcXCIsIFxcXCJDaG9pY2VzXFxcIiwgXFxcIkRlZmF1bHRcXFwifSxcXG5cXHRcXFwiU3VjY2VlZFxcXCI6IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiT3V0cHV0XFxcIn0sXFxuXFx0XFxcIkZhaWxcXFwiOiB7XFxcIkVycm9yXFxcIiwgXFxcIkNhdXNlXFxcIiwgXFxcIkVycm9yUGF0aFxcXCIsIFxcXCJDYXVzZVBhdGhcXFwifSxcXG59XFxuXFxuX3BmX3NmbmZsZF9rbm93biA6PSB7ZiB8IHNvbWUgXywgZnMgaW4gX3BmX3NmbmZsZF9hbGxvd2VkOyBzb21lIGYgaW4gZnN9IHwgX3BmX3NmbmZsZF9jb21tb25cXG5cXG4jIHBvbnl0YWlsOiBvbmx5IGZpZWxkcyB0aGUgc2VydmljZSBhbHJlYWR5IGtub3dzIGFyZSBqdWRnZWQ7IGEgZmllbGQgdGhhdCBub1xcbiMgdHlwZSBhY2NlcHRzIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBpdCBtYXkgYmUgYSBuZXdlciBBU0wgZmVhdHVyZSByYXRoZXIgdGhhblxcbiMgYSB0eXBvIChhIGZhbHNlIHBvc2l0aXZlIGhlcmUgd291bGQgYmxvY2sgdmFsaWQgZGVwbG95cykuIENhc2UgdmFyaWFudHMgb2YgYVxcbiMga25vd24gZmllbGQgKEFTTCBpcyBjYXNlLXNlbnNpdGl2ZSkgYXJlIGp1ZGdlZCB0b28uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXN0YXRlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgZl0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgKFR5cGUgJXMpIGhhcyBmaWVsZCAnJXMnLCB3aGljaCBTdGVwIEZ1bmN0aW9ucyBkb2VzIG5vdCBhY2NlcHQgb24gdGhhdCBzdGF0ZSB0eXBlOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJyVzJyBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbc25hbWUsIHQsIGYsIGZdKSxcXG5cXHRfcGZfc2ZuZmxkX2ZpeCwgX3BmX3NmbmZsZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0dCA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpXFxuXFx0YWxsb3dlZCA6PSBfcGZfc2ZuZmxkX2FsbG93ZWRbdF1cXG5cXHRzb21lIGYsIF8gaW4gc3RcXG5cXHRub3QgZiBpbiBfcGZfc2ZuZmxkX2NvbW1vblxcblxcdG5vdCBmIGluIGFsbG93ZWRcXG5cXHRmIGluIF9wZl9zZm5mbGRfa25vd25cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXN0YXRlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgZl0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgaGFzIGZpZWxkICclcyc7IEFTTCBmaWVsZCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgKGRpZCB5b3UgbWVhbiAnJXMnPyksIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJyVzJyBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbc25hbWUsIGYsIGssIGZdKSxcXG5cXHRfcGZfc2ZuZmxkX2ZpeCwgX3BmX3NmbmZsZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmLCBfIGluIHN0XFxuXFx0bm90IGYgaW4gX3BmX3NmbmZsZF9rbm93blxcblxcdHNvbWUgayBpbiBfcGZfc2ZuZmxkX2tub3duXFxuXFx0bG93ZXIoaykgPT0gbG93ZXIoZilcXG59XFxuXFxuX3BmX3NmbmZsZF90b3AgOj0ge1xcXCJDb21tZW50XFxcIiwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBcXFwiU3RhcnRBdFxcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJWZXJzaW9uXFxcIiwgXFxcIlN0YXRlc1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXN0YXRlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbX3BmX3NmbmxpYl9wcm9wKG5hbWUpLCBmXSksXFxuXFx0c3ByaW50ZihcXFwidG9wLWxldmVsIGZpZWxkICclcycgaXMgbm90IGFuIEFTTCBmaWVsZCAoZGlkIHlvdSBtZWFuICclcyc/KTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IEZpZWxkICclcycgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIiwgW2YsIGssIGZdKSxcXG5cXHRfcGZfc2ZuZmxkX2ZpeCwgX3BmX3NmbmZsZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3NmbmxpYl9hc2wobmFtZSlcXG5cXHRzb21lIGYsIF8gaW4gYXNsXFxuXFx0bm90IGYgaW4gX3BmX3NmbmZsZF90b3BcXG5cXHRzb21lIGsgaW4gX3BmX3NmbmZsZF90b3BcXG5cXHRsb3dlcihrKSA9PSBsb3dlcihmKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtc3RhdGUtZmllbGRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5WZXJzaW9uXFxcIiwgW19wZl9zZm5saWJfcHJvcChuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIkFTTCBWZXJzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZDsgdGhlIG9ubHkgYWNjZXB0ZWQgdmFsdWUgaXMgXFxcXFxcXCIxLjBcXFxcXFxcIiAoQ3JlYXRlU3RhdGVNYWNoaW5lOiBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBbMS4wXVxcXFxcXFwiKVxcXCIsIFt2XSksXFxuXFx0X3BmX3NmbmZsZF9maXgsIF9wZl9zZm5mbGRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0diA6PSBvYmplY3QuZ2V0KF9wZl9zZm5saWJfYXNsKG5hbWUpLCBcXFwiVmVyc2lvblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0diAhPSBcXFwiMS4wXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtdGVybWluYWwtc3RhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIEFTTCBzdGF0ZSBtYWNoaW5lIG5lZWRzIGF0IGxlYXN0IG9uZSB0ZXJtaW5hbCBzdGF0ZSAoRW5kOiB0cnVlLCBTdWNjZWVkIG9yIEZhaWwpIGF0IHRoZSB0b3AgbGV2ZWxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbnRlcm1fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlbWFjaGluZS1zdHJ1Y3R1cmUuaHRtbFxcXCJcXG5cXG5fcGZfc2ZudGVybV9maXggOj0gXFxcIk1hcmsgdGhlIGxhc3Qgc3RhdGUgd2l0aCBFbmQ6IHRydWUgb3IgZW5kIHdpdGggYSBTdWNjZWVkL0ZhaWwgc3RhdGVcXFwiXFxuXFxuX3BmX3NmbnRlcm1fb2sobmFtZSkgaWYge1xcblxcdHNvbWUgW24sIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGVzXFxuXFx0biA9PSBuYW1lXFxuXFx0cCA9PSBcXFwiU3RhdGVzXFxcIlxcblxcdHNvbWUgXywgc3QgaW4gc1xcblxcdGlzX29iamVjdChzdClcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiRW5kXFxcIiwgZmFsc2UpID09IHRydWVcXG59XFxuXFxuX3BmX3NmbnRlcm1fb2sobmFtZSkgaWYge1xcblxcdHNvbWUgW24sIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGVzXFxuXFx0biA9PSBuYW1lXFxuXFx0cCA9PSBcXFwiU3RhdGVzXFxcIlxcblxcdHNvbWUgXywgc3QgaW4gc1xcblxcdGlzX29iamVjdChzdClcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpIGluIHtcXFwiU3VjY2VlZFxcXCIsIFxcXCJGYWlsXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXRlcm1pbmFsLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZXNcXFwiLCBbX3BmX3NmbmxpYl9wcm9wKG5hbWUpXSksXFxuXFx0XFxcIm5vIHRvcC1sZXZlbCBzdGF0ZSBpcyB0ZXJtaW5hbCAoRW5kOiB0cnVlLCBTdWNjZWVkIG9yIEZhaWwpOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIk1JU1NJTkdfRU5EX1NUQVRFOiBXb3JrZmxvdyBoYXMgbm8gdGVybWluYWwgc3RhdGVcXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3NmbnRlcm1fZml4LCBfcGZfc2ZudGVybV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBfXSBpbiBfcGZfc2ZubGliX3Njb3Blc1xcblxcdHAgPT0gXFxcIlN0YXRlc1xcXCJcXG5cXHRub3QgX3BmX3NmbnRlcm1fb2sobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLXVucmVhY2hhYmxlLXN0YXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBBU0wgc3RhdGUgbXVzdCBiZSByZWFjaGFibGU6IGEgc3RhdGUgdGhhdCBpcyBub3QgU3RhcnRBdCBhbmQgdGhhdCBubyBvdGhlciBzdGF0ZSB0cmFuc2l0aW9ucyB0byBmYWlscyBjcmVhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZudW5yX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZW1hY2hpbmUtc3RydWN0dXJlLmh0bWxcXFwiXFxuXFxuX3BmX3NmbnVucl9maXggOj0gXFxcIlRyYW5zaXRpb24gdG8gdGhlIHN0YXRlIGZyb20gYW5vdGhlciBzdGF0ZSAoTmV4dC9EZWZhdWx0L0Nob2ljZXMvQ2F0Y2gpIG9yIHJlbW92ZSBpdFxcXCJcXG5cXG4jIFtuYW1lLCBzY29wZSBwYXRoLCBmcm9tIHN0YXRlLCB0YXJnZXQgc3RhdGVdXFxuX3BmX3NmbnVucl9lZGdlIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgdGFyZ2V0XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUga2V5IGluIFtcXFwiTmV4dFxcXCIsIFxcXCJEZWZhdWx0XFxcIl1cXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChzdCwga2V5LCBudWxsKVxcblxcdGlzX3N0cmluZyh0YXJnZXQpXFxufVxcblxcbl9wZl9zZm51bnJfZWRnZSBjb250YWlucyBbbmFtZSwgcCwgc25hbWUsIHRhcmdldF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGZpZWxkIGluIFtcXFwiQ2hvaWNlc1xcXCIsIFxcXCJDYXRjaFxcXCJdXFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoc3QsIGZpZWxkLCBbXSlcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0c29tZSBjIGluIGFyclxcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcbn1cXG5cXG5fcGZfc2ZudW5yX2luKG5hbWUsIHAsIHQpIGlmIHtcXG5cXHRzb21lIFtuMiwgcDIsIGZyb20sIHQyXSBpbiBfcGZfc2ZudW5yX2VkZ2VcXG5cXHRuMiA9PSBuYW1lXFxuXFx0cDIgPT0gcFxcblxcdHQyID09IHRcXG5cXHRmcm9tICE9IHRcXG59XFxuXFxuIyBwb255dGFpbDogc291bmQgc3Vic2V0IG9mIHRoZSBzZXJ2aWNlJ3MgcmVhY2hhYmlsaXR5IGNoZWNrIOKAlCBhIHN0YXRlIHdpdGggbm9cXG4jIGluY29taW5nIGVkZ2UgZnJvbSBhbm90aGVyIHN0YXRlIGlzIGNlcnRhaW5seSB1bnJlYWNoYWJsZSwgYnV0IGEgY3ljbGUgb2ZcXG4jIG9ycGhhbnMgcGFzc2VzIChuZWVkcyBncmFwaC5yZWFjaGFibGUsIHdoaWNoIHRoZSBlbmdpbmUgbGFja3MpLiBBIGRhbmdsaW5nXFxuIyBTdGFydEF0IGlzIGxlZnQgdG8gZW5naW5lIHJ1bGUgRTM2MDEuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXVucmVhY2hhYmxlLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgaXMgbm90IHJlYWNoYWJsZTogaXQgaXMgbm90IHRoZSBTdGFydEF0ICgnJXMnKSBhbmQgbm8gb3RoZXIgc3RhdGUgaW4gaXRzIFN0YXRlcyBibG9jayB0cmFuc2l0aW9ucyB0byBpdDsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJNSVNTSU5HX1RSQU5TSVRJT05fVEFSR0VUOiBTdGF0ZSBcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIGlzIG5vdCByZWFjaGFibGUuXFxcXFxcXCJcXFwiLCBbc25hbWUsIHNhLCBzbmFtZV0pLFxcblxcdF9wZl9zZm51bnJfZml4LCBfcGZfc2ZudW5yX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNhXSBpbiBfcGZfc2ZubGliX3Njb3Blc1xcblxcdGlzX3N0cmluZyhzYSlcXG5cXHRzYSBpbiBvYmplY3Qua2V5cyhzKVxcblxcdHNvbWUgc25hbWUsIHN0IGluIHNcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0c25hbWUgIT0gc2FcXG5cXHRub3QgX3BmX3NmbnVucl9pbihuYW1lLCBwLCBzbmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLXdhaXQtdGltaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFdhaXQgc3RhdGUgY2FycmllcyBleGFjdGx5IG9uZSBvZiBTZWNvbmRzIC8gVGltZXN0YW1wIC8gU2Vjb25kc1BhdGggLyBUaW1lc3RhbXBQYXRoLCBhbmQgYSBsaXRlcmFsIFRpbWVzdGFtcCBpcyBSRkMzMzM5IHdpdGggVCBhbmQgWiAoYWxsIGZvdXIgYWJzZW50IGlzIGNvdmVyZWQgYnkgZW5naW5lIHJ1bGUgRTM2MDEpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm53YWl0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZS13YWl0Lmh0bWxcXFwiXFxuXFxuX3BmX3NmbndhaXRfZml4IDo9IFxcXCJLZWVwIG9uZSB0aW1pbmcgZmllbGQ7IHdyaXRlIFRpbWVzdGFtcCBhcyAyMDMwLTAxLTAxVDAwOjAwOjAwWlxcXCJcXG5cXG5fcGZfc2Zud2FpdF9maWVsZHMgOj0ge1xcXCJTZWNvbmRzXFxcIiwgXFxcIlRpbWVzdGFtcFxcXCIsIFxcXCJTZWNvbmRzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBQYXRoXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtd2FpdC10aW1pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksXFxuXFx0c3ByaW50ZihcXFwiV2FpdCBzdGF0ZSAnJXMnIHNldHMgJWQgb2YgU2Vjb25kcy9UaW1lc3RhbXAvU2Vjb25kc1BhdGgvVGltZXN0YW1wUGF0aDsgZXhhY3RseSBvbmUgaXMgYWxsb3dlZCwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IFtTZWNvbmRzUGF0aCwgU2Vjb25kcywgVGltZXN0YW1wUGF0aCwgVGltZXN0YW1wXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBuXSksXFxuXFx0X3BmX3NmbndhaXRfZml4LCBfcGZfc2Zud2FpdF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiV2FpdFxcXCJcXG5cXHRuIDo9IGNvdW50KHtrIHwgc29tZSBrLCBfIGluIHN0OyBrIGluIF9wZl9zZm53YWl0X2ZpZWxkc30pXFxuXFx0biA+IDFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXdhaXQtdGltaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5UaW1lc3RhbXBcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIldhaXQgc3RhdGUgJyVzJyBUaW1lc3RhbXAgJyVzJyBpcyBub3QgYW4gUkZDMzMzOSB0aW1lc3RhbXAgd2l0aCBhbiB1cHBlcmNhc2UgVCBzZXBhcmF0b3IgYW5kIFogc3VmZml4OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogU3RyaW5nIGRvZXMgbm90IG1hdGNoIFJGQzMzMzkgdGltZXN0YW1wXFxcXFxcXCJcXFwiLCBbc25hbWUsIHRzXSksXFxuXFx0X3BmX3NmbndhaXRfZml4LCBfcGZfc2Zud2FpdF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiV2FpdFxcXCJcXG5cXHR0cyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiVGltZXN0YW1wXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodHMpXFxuXFx0bm90IHN0YXJ0c3dpdGgodHMsIFxcXCJ7JVxcXCIpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV17NH0tWzAtOV17Mn0tWzAtOV17Mn1UWzAtOV17Mn06WzAtOV17Mn06WzAtOV17Mn0oWy5dWzAtOV0rKT9aJFxcXCIsIHRzKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1kZWZpbml0aW9uLWV4YWN0bHktb25lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHN0YXRlIG1hY2hpbmUgY2FycmllcyBleGFjdGx5IG9uZSBvZiBEZWZpbml0aW9uLCBEZWZpbml0aW9uU3RyaW5nIG9yIERlZmluaXRpb25TM0xvY2F0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5kZWZfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zdGVwZnVuY3Rpb25zLXN0YXRlbWFjaGluZS5odG1sXFxcIlxcblxcbl9wZl9zZm5kZWZfZml4IDo9IFxcXCJLZWVwIG9uZSBvZiBEZWZpbml0aW9uIC8gRGVmaW5pdGlvblN0cmluZyAvIERlZmluaXRpb25TM0xvY2F0aW9uXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWRlZmluaXRpb24tZXhhY3RseS1vbmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCBvZiBEZWZpbml0aW9uIC8gRGVmaW5pdGlvblN0cmluZyAvIERlZmluaXRpb25TM0xvY2F0aW9uIGFyZSBzZXQ7IGV4YWN0bHkgb25lIGlzIHJlcXVpcmVkLCBhbmQgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IHZhbGlkYXRpb24gZmFpbGVkLiBQbGVhc2UgdXNlIG9uZSBvZiBbRGVmaW5pdGlvblMzTG9jYXRpb25dLCBbRGVmaW5pdGlvblN0cmluZ10gb3IgW0RlZmluaXRpb25dLlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRfcGZfc2ZuZGVmX2ZpeCwgX3BmX3NmbmRlZl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRuIDo9IGNvdW50KHtrIHwgc29tZSBrIGluIFtcXFwiRGVmaW5pdGlvblxcXCIsIFxcXCJEZWZpbml0aW9uU3RyaW5nXFxcIiwgXFxcIkRlZmluaXRpb25TM0xvY2F0aW9uXFxcIl07IF9wZl9zZm5saWJfaGFzKHByb3BzLCBrKX0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWVuY3J5cHRpb24tY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogQ1VTVE9NRVJfTUFOQUdFRF9LTVNfS0VZIHJlcXVpcmVzIEttc0tleUlkLCBhbmQgQVdTX09XTkVEX0tFWSByZWplY3RzIEttc0tleUlkIGFuZCBLbXNEYXRhS2V5UmV1c2VQZXJpb2RTZWNvbmRzIChzdGF0ZSBtYWNoaW5lcyBhbmQgYWN0aXZpdGllcylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCIsXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6QWN0aXZpdHlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuZW5jX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0VuY3J5cHRpb25Db25maWd1cmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmVuY19maXggOj0gXFxcIlBhaXIgQ1VTVE9NRVJfTUFOQUdFRF9LTVNfS0VZIHdpdGggYSBLbXNLZXlJZDsgbGVhdmUgS21zS2V5SWQvS21zRGF0YUtleVJldXNlUGVyaW9kU2Vjb25kcyBvdXQgZm9yIEFXU19PV05FRF9LRVlcXFwiXFxuXFxuX3BmX3NmbmVuY19yZXMgY29udGFpbnMgW25hbWUsIGVuYywgdF0gaWYge1xcblxcdHNvbWUgcnQgaW4gW1xcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIsIFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XFxcIl1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZW5jIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFbmNyeXB0aW9uQ29uZmlndXJhdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGVuYylcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHQpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWVuY3J5cHRpb24tY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FbmNyeXB0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkVuY3J5cHRpb25Db25maWd1cmF0aW9uLlR5cGUgaXMgQ1VTVE9NRVJfTUFOQUdFRF9LTVNfS0VZIHdpdGhvdXQgYSBLbXNLZXlJZDsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IE11c3Qgc2V0IGEgdmFsaWQga21zS2V5SWQuXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zZm5lbmNfZml4LCBfcGZfc2ZuZW5jX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIGVuYywgdF0gaW4gX3BmX3NmbmVuY19yZXNcXG5cXHR0ID09IFxcXCJDVVNUT01FUl9NQU5BR0VEX0tNU19LRVlcXFwiXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKGVuYywgXFxcIkttc0tleUlkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tZW5jcnlwdGlvbi1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uJXNcXFwiLCBbZl0pLFxcblxcdHNwcmludGYoXFxcIkVuY3J5cHRpb25Db25maWd1cmF0aW9uLlR5cGUgaXMgQVdTX09XTkVEX0tFWSBidXQgJXMgaXMgc2V0OyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogQ3VzdG9tICVzIGlzIG5vdCBhbGxvd2VkIHdoZW4gc2VsZWN0aW5nIEFXU19PV05FRF9LRVkuXFxcXFxcXCJcXFwiLCBbZiwgbGNdKSxcXG5cXHRfcGZfc2ZuZW5jX2ZpeCwgX3BmX3NmbmVuY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBlbmMsIHRdIGluIF9wZl9zZm5lbmNfcmVzXFxuXFx0dCA9PSBcXFwiQVdTX09XTkVEX0tFWVxcXCJcXG5cXHRzb21lIFtmLCBsY10gaW4gX3BmX3NmbmVuY19vd25lZFxcblxcdF9wZl9zZm5saWJfaGFzKGVuYywgZilcXG59XFxuXFxuX3BmX3NmbmVuY19vd25lZCBjb250YWlucyBbXFxcIkttc0tleUlkXFxcIiwgXFxcImttc0tleUlkXFxcIl1cXG5cXG5fcGZfc2ZuZW5jX293bmVkIGNvbnRhaW5zIFtcXFwiS21zRGF0YUtleVJldXNlUGVyaW9kU2Vjb25kc1xcXCIsIFxcXCJrbXNEYXRhS2V5UmV1c2VQZXJpb2RTZWNvbmRzXFxcIl1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1leHByZXNzLXVuc3VwcG9ydGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBFWFBSRVNTIHN0YXRlIG1hY2hpbmUgY2Fubm90IHVzZSAuc3luYyAvIC53YWl0Rm9yVGFza1Rva2VuIGludGVncmF0aW9ucywgQWN0aXZpdHkgcmVzb3VyY2VzLCBvciBEaXN0cmlidXRlZCBNYXAgKGF0IGFueSBuZXN0aW5nIGxldmVsKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuZXhfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2Nob29zaW5nLXdvcmtmbG93LXR5cGUuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuZXhfZml4IDo9IFxcXCJTd2l0Y2ggdGhlIHN0YXRlIG1hY2hpbmUgdG8gU1RBTkRBUkQsIG9yIHVzZSBSZXF1ZXN0LVJlc3BvbnNlIGludGVncmF0aW9ucyBhbmQgSW5saW5lIE1hcCBpbiB0aGUgRXhwcmVzcyB3b3JrZmxvd1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1leHByZXNzLXVuc3VwcG9ydGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZXNvdXJjZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiRVhQUkVTUyBzdGF0ZSBtYWNoaW5lOiBUYXNrIHN0YXRlICclcycgUmVzb3VyY2UgJyVzJyB1c2VzIGEgJXMgaW50ZWdyYXRpb24gcGF0dGVybjsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IEV4cHJlc3Mgc3RhdGUgbWFjaGluZSBkb2VzIG5vdCBzdXBwb3J0ICclcycgc2VydmljZSBpbnRlZ3JhdGlvblxcXFxcXFwiXFxcIiwgW3NuYW1lLCByZXMsIHBhdCwgcGF0XSksXFxuXFx0X3BmX3NmbmV4X2ZpeCwgX3BmX3NmbmV4X3VybCkgaWYge1xcblxcdF9wZl9zZm5saWJfdHlwZShuYW1lKSA9PSBcXFwiRVhQUkVTU1xcXCJcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiVGFza1xcXCJcXG5cXHRyZXMgOj0gb2JqZWN0LmdldChzdCwgXFxcIlJlc291cmNlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmVzKVxcblxcdHNvbWUgcGF0IGluIFtcXFwiLnN5bmNcXFwiLCBcXFwiLndhaXRGb3JUYXNrVG9rZW5cXFwiXVxcblxcdHJlZ2V4Lm1hdGNoKHNwcmludGYoXFxcIlslc10oOjIpPyRcXFwiLCBbcGF0XSksIHJlcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tZXhwcmVzcy11bnN1cHBvcnRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmVzb3VyY2VcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIkVYUFJFU1Mgc3RhdGUgbWFjaGluZTogVGFzayBzdGF0ZSAnJXMnIHRhcmdldHMgYW4gQWN0aXZpdHk7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBFeHByZXNzIHN0YXRlIG1hY2hpbmUgZG9lcyBub3Qgc3VwcG9ydCBBY3Rpdml0eSBBUk5cXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5leF9maXgsIF9wZl9zZm5leF91cmwpIGlmIHtcXG5cXHRfcGZfc2ZubGliX3R5cGUobmFtZSkgPT0gXFxcIkVYUFJFU1NcXFwiXFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHJlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmVzb3VyY2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyZXMpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3RhdGVzOlteOl0rOlteOl0rOmFjdGl2aXR5OlxcXCIsIHJlcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tZXhwcmVzcy11bnN1cHBvcnRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXMuUHJvY2Vzc29yQ29uZmlnLk1vZGVcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiRVhQUkVTUyBzdGF0ZSBtYWNoaW5lOiBNYXAgc3RhdGUgJyVzJyBydW5zIGluIERJU1RSSUJVVEVEIG1vZGU7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ01vZGUnIHdpdGggdmFsdWUgJ0RJU1RSSUJVVEVEJyBpcyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnRVhQUkVTUycgc3RhdGUgbWFjaGluZXNcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5leF9maXgsIF9wZl9zZm5leF91cmwpIGlmIHtcXG5cXHRfcGZfc2ZubGliX3R5cGUobmFtZSkgPT0gXFxcIkVYUFJFU1NcXFwiXFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUga2V5IGluIFtcXFwiSXRlbVByb2Nlc3NvclxcXCIsIFxcXCJJdGVyYXRvclxcXCJdXFxuXFx0cHJvYyA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2MpXFxuXFx0b2JqZWN0LmdldChvYmplY3QuZ2V0KHByb2MsIFxcXCJQcm9jZXNzb3JDb25maWdcXFwiLCB7fSksIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIkRJU1RSSUJVVEVEXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1rbXMta2V5LXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uS21zS2V5SWQgbXVzdCBiZSBhIGtleSBpbiB0aGUgZGVwbG95IHJlZ2lvbiAoc3RhdGUgbWFjaGluZXMgYW5kIGFjdGl2aXRpZXMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiLFxuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbmttc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvZW5jcnlwdGlvbi1hdC1yZXN0Lmh0bWxcXFwiXFxuXFxuX3BmX3Nmbmttc19maXggOj0gXFxcIlVzZSBhIEtNUyBrZXkgY3JlYXRlZCBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIHN0YXRlIG1hY2hpbmUgKEZuOjpHZXRBdHQgS2V5LkFybiBvZiBhIGtleSBpbiB0aGlzIHN0YWNrKVxcXCJcXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1rbXMta2V5LXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uS21zS2V5SWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkttc0tleUlkIGlzIGEga2V5IGluICclcycgYnV0IHRoZSBkZXBsb3kgcmVnaW9uIGlzICclcyc7IEtNUyByZWplY3RzIHRoZSBrZXkgYXQgY3JlYXRlIHRpbWUgd2l0aCBcXFxcXFxcIkludmFsaWRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogSW52YWxpZCBhcm4gJXNcXFxcXFxcIlxcXCIsIFtwYXJ0c1szXSwgcmVnaW9uLCBwYXJ0c1szXV0pLFxcblxcdF9wZl9zZm5rbXNfZml4LCBfcGZfc2Zua21zX3VybCkgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgcnQgaW4gW1xcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIsIFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XFxcIl1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnQpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uS21zS2V5SWRcXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzJdID09IFxcXCJrbXNcXFwiXFxuXFx0cGFydHNbM10gIT0gXFxcIlxcXCJcXG5cXHRwYXJ0c1szXSAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tbG9nZ2luZy1kZXN0aW5hdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTG9nZ2luZ0NvbmZpZ3VyYXRpb24gd2l0aCBMZXZlbCBvdGhlciB0aGFuIE9GRiBuZWVkcyBleGFjdGx5IG9uZSBEZXN0aW5hdGlvbnMgZW50cnkgY2FycnlpbmcgQ2xvdWRXYXRjaExvZ3NMb2dHcm91cC5Mb2dHcm91cEFybiwgYW5kIGEgbGl0ZXJhbCBBUk4gbXVzdCBiZSBhIENsb3VkV2F0Y2ggTG9ncyBsb2ctZ3JvdXAgQVJOIGVuZGluZyBpbiA6KlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZubG9nX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zdGVwZnVuY3Rpb25zLXN0YXRlbWFjaGluZS1sb2dnaW5nY29uZmlndXJhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9zZm5sb2dfZml4IDo9IFxcXCJSZWZlcmVuY2UgdGhlIGxvZyBncm91cCB3aXRoIEZuOjpHZXRBdHQgTG9nR3JvdXAuQXJuIChpdCBhbHJlYWR5IGVuZHMgaW4gOiopIGluIGEgc2luZ2xlIERlc3RpbmF0aW9ucyBlbnRyeVxcXCJcXG5cXG4jIEFuIGVtcHR5IERlc3RpbmF0aW9ucyBhcnJheSBpcyBzdG9wcGVkIGJ5IHRoZSBzY2hlbWEgKEYzMDMyIG1pbkl0ZW1zKTtcXG4jIHRoZSBhYnNlbnQtd2hpbGUtZW5hYmxlZCBhbmQgdHdvLWVudHJpZXMgY2FzZXMgYXJlIG5vdC5cXG5fcGZfc2ZubG9nX29uKG5hbWUpIGlmIHtcXG5cXHRsdmwgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5MZXZlbFxcXCIpXFxuXFx0aXNfc3RyaW5nKGx2bClcXG5cXHRsdmwgIT0gXFxcIk9GRlxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tbG9nZ2luZy1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTG9nZ2luZ0NvbmZpZ3VyYXRpb24uRGVzdGluYXRpb25zXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMb2dnaW5nQ29uZmlndXJhdGlvbiBoYXMgJWQgRGVzdGluYXRpb25zIGVudHJpZXMgd2hpbGUgTGV2ZWwgaXMgbm90IE9GRjsgZXhhY3RseSBvbmUgaXMgcmVxdWlyZWQsIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogTXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIExvZyBEZXN0aW5hdGlvbi5cXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0X3BmX3NmbmxvZ19maXgsIF9wZl9zZm5sb2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0X3BmX3NmbmxvZ19vbihuYW1lKVxcblxcdG4gOj0gY291bnQoZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9uc1xcXCIpKVxcblxcdG4gIT0gMVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1sb2dnaW5nLWRlc3RpbmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0XFxcImEgRGVzdGluYXRpb25zIGVudHJ5IGhhcyBubyBDbG91ZFdhdGNoTG9nc0xvZ0dyb3VwOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogTXVzdCBzZXQgdmFsaWQgQ2xvdWRXYXRjaCBMb2cgR3JvdXAgQVJOLlxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc2ZubG9nX2ZpeCwgX3BmX3NmbmxvZ191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRfcGZfc2ZubG9nX29uKG5hbWUpXFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5EZXN0aW5hdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChkLnZhbHVlKVxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhkLnZhbHVlLCBcXFwiQ2xvdWRXYXRjaExvZ3NMb2dHcm91cFxcXCIpXFxufVxcblxcbl9wZl9zZm5sb2dfYXJuIGNvbnRhaW5zIFtuYW1lLCBpZHgsIGFybl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdF9wZl9zZm5sb2dfb24obmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGQudmFsdWUpXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQob2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQ2xvdWRXYXRjaExvZ3NMb2dHcm91cFxcXCIsIHt9KSwgXFxcIkxvZ0dyb3VwQXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0aWR4IDo9IGQuaW5kZXhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tbG9nZ2luZy1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5EZXN0aW5hdGlvbnMuJWQuQ2xvdWRXYXRjaExvZ3NMb2dHcm91cC5Mb2dHcm91cEFyblxcXCIsIFtpZHhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2dHcm91cEFybiAnJXMnIGlzIG5vdCBhIENsb3VkV2F0Y2ggTG9ncyBsb2ctZ3JvdXAgQVJOOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogUHJvdmlkZWQgQVJOIGlzIG5vdCBDbG91ZFdhdGNoIExvZ3MgTG9nIEdyb3VwIEFSTi5cXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc2ZubG9nX2ZpeCwgX3BmX3NmbmxvZ191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBpZHgsIGFybl0gaW4gX3BmX3NmbmxvZ19hcm5cXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6bG9nczpbXjpdKjpbXjpdKjpsb2ctZ3JvdXA6XFxcIiwgYXJuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1sb2dnaW5nLWRlc3RpbmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9ucy4lZC5DbG91ZFdhdGNoTG9nc0xvZ0dyb3VwLkxvZ0dyb3VwQXJuXFxcIiwgW2lkeF0pLFxcblxcdHNwcmludGYoXFxcIkxvZ0dyb3VwQXJuICclcycgbGFja3MgdGhlIDoqIHF1YWxpZmllciAoRm46OkdldEF0dCBMb2dHcm91cC5Bcm4gaW5jbHVkZXMgaXQpOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogTG9nIEdyb3VwIEFSTiBtdXN0IGJlIHByb3ZpZGVkIHdpdGggJyonIHF1YWxpZmllci5cXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc2ZubG9nX2ZpeCwgX3BmX3NmbmxvZ191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBpZHgsIGFybl0gaW4gX3BmX3NmbmxvZ19hcm5cXG5cXHRyZWdleC5tYXRjaChcXFwiXmFybjpbXjpdKzpsb2dzOlteOl0qOlteOl0qOmxvZy1ncm91cDpcXFwiLCBhcm4pXFxuXFx0bm90IGVuZHN3aXRoKGFybiwgXFxcIjoqXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tbG9nZ2luZy1uYW1lLWFzY2lpXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXaXRoIENsb3VkV2F0Y2ggTG9ncyBsb2dnaW5nIGVuYWJsZWQgKExldmVsIG90aGVyIHRoYW4gT0ZGKSB0aGUgU3RhdGVNYWNoaW5lTmFtZSBtYXkgb25seSBjb250YWluIDAtOSwgQS1aLCBhLXosIC4gLSBhbmQgXyAobm9uLUFTQ0lJIG5hbWVzIGFyZSBhY2NlcHRlZCBvbmx5IHdpdGhvdXQgbG9nZ2luZylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmxvZ25hbWVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfQ3JlYXRlU3RhdGVNYWNoaW5lLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmxvZ25hbWVfZml4IDo9IFxcXCJSZW5hbWUgdGhlIHN0YXRlIG1hY2hpbmUgdG8gWzAtOUEtWmEtei5fLV0rIG9yIHR1cm4gbG9nZ2luZyBvZmZcXFwiXFxuXFxuIyBUaGUgbmFtZSBpdHNlbGYgYWNjZXB0cyBub24tQVNDSUkgY2hhcmFjdGVycyAobWVhc3VyZWQ6ICfjg4bjgrnjg4gnIGNyZWF0ZXNcXG4jIGZpbmUpOyBpdCBpcyB0aGUgbG9nIGRlbGl2ZXJ5IHJlc291cmNlSWQgcGF0dGVybiBeWzAtOUEtWmEtei5cXFxcL1xcXFwtXzpdKyRcXG4jIChxdW90ZWQgdmVyYmF0aW0gZnJvbSB0aGUgc2VydmljZSBlcnJvcikgdGhhdCByZWplY3RzIGl0IG9uY2VcXG4jIExvZ2dpbmdDb25maWd1cmF0aW9uLkxldmVsIGlzIG5vdCBPRkYuIFRoZSBjbGFzcyBtaXJyb3JzIHRoYXQgcGF0dGVybjsgdGhlXFxuIyAvIGFuZCA6IGl0IGFkbWl0cyBhcmUgYWxyZWFkeSByZWplY3RlZCBieSB0aGUgbmFtZSBpdHNlbGYgKHBmLXNmbi1uYW1lLWNoYXJzZXQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWxvZ2dpbmctbmFtZS1hc2NpaVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3RhdGVNYWNoaW5lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiU3RhdGVNYWNoaW5lTmFtZSAnJXMnIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBbMC05QS1aYS16Ll8tXSB3aGlsZSBMb2dnaW5nQ29uZmlndXJhdGlvbi5MZXZlbCBpcyAlczsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkTG9nZ2luZ0NvbmZpZ3VyYXRpb246IC4uLiBWYWx1ZSAnYXJuOi4uLjpzdGF0ZU1hY2hpbmU6JXMnIGF0ICdyZXNvdXJjZUlkJyBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBzYXRpc2Z5IHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuXFxcXFxcXCJcXFwiLCBbbiwgbHZsLCBuXSksXFxuXFx0X3BmX3NmbmxvZ25hbWVfZml4LCBfcGZfc2ZubG9nbmFtZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRsdmwgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5MZXZlbFxcXCIpXFxuXFx0aXNfc3RyaW5nKGx2bClcXG5cXHRsdmwgIT0gXFxcIk9GRlxcXCJcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3RhdGVNYWNoaW5lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOUEtWmEtei5fOi8tXSskXFxcIiwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tbmFtZS1jaGFyc2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGF0ZU1hY2hpbmVOYW1lIGFuZCBBY3Rpdml0eSBOYW1lIG1heSBub3QgY29udGFpbiB3aGl0ZXNwYWNlLCBicmFja2V0cyAoPCA+IHsgfSBbIF0pLCB3aWxkY2FyZHMgKD8gKiksIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgXFxcIiAjICUgXFxcXCBeIHwgfiBgICQgJiAsIDsgOiAvIG9yIGNvbnRyb2wgY2hhcmFjdGVycyAobm9uLUFTQ0lJIGxldHRlcnMgYXJlIGFjY2VwdGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIixcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpBY3Rpdml0eVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5uYW1lX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zZXJ2aWNlLXF1b3Rhcy5odG1sXFxcIlxcblxcbl9wZl9zZm5uYW1lX2ZpeCA6PSBcXFwiVXNlIGxldHRlcnMsIGRpZ2l0cywgLSBhbmQgXyBpbiB0aGUgbmFtZVxcXCJcXG5cXG4jIE1lYXN1cmVkIDIwMjYtMDktMDU6ICdteSBtYWNoaW5lJywgJ2EvYicgYW5kICdhPGI+JyBhcmUgcmVqZWN0ZWQgd2l0aFxcbiMgSW52YWxpZE5hbWU7ICfjg4bjgrnjg4gnIGlzIGFjY2VwdGVkIChzbyBubyBBU0NJSS1vbmx5IGNoZWNrIGhlcmUg4oCUIHNlZVxcbiMgcGYtc2ZuLWxvZ2dpbmctbmFtZS1hc2NpaSBmb3IgdGhlIGxvZ2dpbmcgY2FzZSkuIFRoZSBzY2hlbWEgY2FycmllcyBvbmx5XFxuIyB0aGUgODAtY2hhcmFjdGVyIG1heGltdW0gKEYzMDMzKS5cXG5fcGZfc2ZubmFtZV9iYWQgOj0gXFxcIltcXFxcXFxcXHM8Pnt9XFxcXFxcXFxbXFxcXFxcXFxdPypcXFxcXFxcIiMlXFxcXFxcXFxcXFxcXFxcXF58fmAkJiw7Oi9cXFxcXFxcXHgwMC1cXFxcXFxcXHgxZlxcXFxcXFxceDdmLVxcXFxcXFxceDlmXVxcXCJcXG5cXG5fcGZfc2ZubmFtZV9wcm9wIGNvbnRhaW5zIFtcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiLCBcXFwiUHJvcGVydGllcy5TdGF0ZU1hY2hpbmVOYW1lXFxcIl1cXG5cXG5fcGZfc2ZubmFtZV9wcm9wIGNvbnRhaW5zIFtcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpBY3Rpdml0eVxcXCIsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLW5hbWUtY2hhcnNldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cHJvcCxcXG5cXHRzcHJpbnRmKFxcXCJuYW1lICclcycgY29udGFpbnMgYSBjaGFyYWN0ZXIgU3RlcCBGdW5jdGlvbnMgcmVqZWN0cyAod2hpdGVzcGFjZSwgPCA+IHsgfSBbIF0gPyAqIFxcXFxcXFwiICMgJSUgXFxcXFxcXFwgXiB8IH4gYCAkICYgLCA7IDogLyBvciBhIGNvbnRyb2wgY2hhcmFjdGVyKTsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkTmFtZTogSW52YWxpZCBOYW1lOiAnJXMnXFxcXFxcXCJcXFwiLCBbbiwgbl0pLFxcblxcdF9wZl9zZm5uYW1lX2ZpeCwgX3BmX3Nmbm5hbWVfdXJsKSBpZiB7XFxuXFx0c29tZSBbcnQsIHByb3BdIGluIF9wZl9zZm5uYW1lX3Byb3BcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnQpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIHByb3ApXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0cmVnZXgubWF0Y2goX3BmX3Nmbm5hbWVfYmFkLCBuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXRhZ3MtYXdzLXByZWZpeFwiLFxuICAgIFwic2VydmljZVwiOiBcInRhZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFnIGtleXMgbWF5IG5vdCB1c2UgdGhlIHJlc2VydmVkIGF3czogcHJlZml4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCIqXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUYWdzIHN1cnZpdmUgaW50byB0aGUgdGVtcGxhdGUgZnJvbSBldmVyeSBzY29wZSB0aGF0IGNhbGxlZCBUYWdzLm9mKCksIGFuZCB0aGVcXG4jIG1lcmdlIGhhcHBlbnMgaW4gY2ZuUHJvcGVydGllcyBhdCByZW5kZXIgdGltZSAtIGFmdGVyIHZhbGlkYXRlVHJlZSAtIHNvIG5vIEwxXFxuIyBvciBMMiB2YWxpZGF0aW9uIGNhbiBzZWUgdGhlIGZpbmFsIGtleSBzZXQuIEFwcGxpZXMgdG8gZXZlcnkgcmVzb3VyY2UgdHlwZS5cXG5fcGZfdGFnYXdzX2JhZCBjb250YWlucyBbbmFtZSwgaWR4LCBrZXldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gb2JqZWN0LmtleXMoaW5wdXQucmVzb3VyY2VzKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFnc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHQudmFsdWUpXFxuXFx0a2V5IDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIktleVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGtleSlcXG5cXHRzdGFydHN3aXRoKGxvd2VyKGtleSksIFxcXCJhd3M6XFxcIilcXG5cXHRpZHggOj0gdC5pbmRleFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXRhZ3MtYXdzLXByZWZpeFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYWdzLiVkLktleVxcXCIsIFtpZHhdKSxcXG5cXHRzcHJpbnRmKFxcXCJUYWcga2V5ICclcycgdXNlcyB0aGUgcmVzZXJ2ZWQgYXdzOiBwcmVmaXg7IEFXUyByZWplY3RzIHRoZSBjcmVhdGUgY2FsbCB3aXRoIFxcXFxcXFwiYXdzOiBwcmVmaXhlZCB0YWcga2V5IG5hbWVzIGFyZSBub3QgYWxsb3dlZCBmb3IgZXh0ZXJuYWwgdXNlLlxcXFxcXFwiXFxcIiwgW2tleV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIHRhZyBrZXkgc28gaXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhd3M6XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3RhZy1lZGl0b3IvbGF0ZXN0L3VzZXJndWlkZS90YWdnaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgaWR4LCBrZXldIGluIF9wZl90YWdhd3NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtdGFncy1jb3VudC1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJ0YWdzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVzb3VyY2UgbWF5IGNhcnJ5IGF0IG1vc3QgNTAgdGFnc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiKlwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIEFXUy13aWRlIGxpbWl0IGlzIDUwIHVzZXIgdGFncyBwZXIgcmVzb3VyY2UuIENvdW50ZWQgb24gdGhlIHJlbmRlcmVkXFxuIyB0ZW1wbGF0ZSwgd2hpY2ggaXMgdGhlIG9ubHkgcGxhY2UgdGhlIG1lcmdlZCBUYWdzLm9mKCkgcmVzdWx0IGV4aXN0cy5cXG5fcGZfdGFnY291bnRfYmFkIGNvbnRhaW5zIFtuYW1lLCBuXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIG9iamVjdC5rZXlzKGlucHV0LnJlc291cmNlcylcXG5cXHR0YWdzIDo9IGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYWdzXFxcIilcXG5cXHRuIDo9IGNvdW50KHRhZ3MpXFxuXFx0biA+IDUwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtdGFncy1jb3VudC1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhZ3NcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIHRhZ3MgYXJlIGF0dGFjaGVkIHRvIHRoaXMgcmVzb3VyY2U7IEFXUyBhbGxvd3MgYXQgbW9zdCA1MCBwZXIgcmVzb3VyY2UgYW5kIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIChcXFxcXFxcIk1vcmUgdGhhbiA1MCB0YWdzIHNwZWNpZmllZC5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJSZWR1Y2UgdGhlIHRhZyBzZXQgdG8gNTAgb3IgZmV3ZXIgLSByZW1lbWJlciB0aGF0IFRhZ3Mub2YoKSBhZGRzIHRhZ3MgZnJvbSBldmVyeSBlbmNsb3Npbmcgc2NvcGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdGFnLWVkaXRvci9sYXRlc3QvdXNlcmd1aWRlL3RhZ2dpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBuXSBpbiBfcGZfdGFnY291bnRfYmFkXFxufVxcblwiXG4gIH1cbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlZExpYkRhdGEge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ286IHN0cmluZztcbn1cblxuLyoqIFNoYXJlZCBoZWxwZXIgbW9kdWxlcyAocnVsZXMvX2xpYikuIEFsd2F5cyBsb2FkZWQgYmVmb3JlIHRoZSBydWxlcy4gKi9cbmV4cG9ydCBjb25zdCBCVU5ETEVEX0xJQlM6IEJ1bmRsZWRMaWJEYXRhW10gPSBbXG4gIHtcbiAgICBcIm5hbWVcIjogXCJfbGliL3NmblwiLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTaGFyZWQgaGVscGVycyBmb3IgdGhlIFN0ZXAgRnVuY3Rpb25zIHJ1bGVzIChydWxlcy9zdGVwZnVuY3Rpb25zL3BmLXNmbi0qKS5cXG4jIExvYWRlZCBhaGVhZCBvZiBldmVyeSBydWxlIChCVU5ETEVEX0xJQlMpOyBuZXZlciBlbWl0cyBkaWFnbm9zdGljcy5cXG4jXFxuIyBBIGRlZmluaXRpb24gYXJyaXZlcyBlaXRoZXIgYXMgRGVmaW5pdGlvblN0cmluZyAoSlNPTiB0ZXh0IOKAlCBGbjo6Sm9pbiAvXFxuIyBGbjo6U3ViIG92ZXIgcHNldWRvIHBhcmFtZXRlcnMgcmVzb2x2ZSgpIGZsYXR0ZW5zOyBhIHJlZmVyZW5jZSB0byBhbm90aGVyXFxuIyByZXNvdXJjZSBkb2VzIG5vdCByZXNvbHZlIGFuZCB0aGUgQVNMIHJ1bGVzIHNraXAgdGhlIG1hY2hpbmUpIG9yIGFzIHRoZSByYXdcXG4jIERlZmluaXRpb24gb2JqZWN0IG9mIGFuIEwxIHJlc291cmNlIChpbnRyaW5zaWNzIGluc2lkZSBhcmUgbWFya2VyIG9iamVjdHMsXFxuIyBuZXZlciBzdHJpbmdzLCBzbyBpc19zdHJpbmcgZ3VhcmRzIG11dGUgdGhlbSkuXFxuXFxuX3BmX3NmbmxpYl9hc2wobmFtZSkgOj0gYXNsIGlmIHtcXG5cXHRkZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIilcXG5cXHRpc19zdHJpbmcoZGVmKVxcblxcdGFzbCA6PSBqc29uLnVubWFyc2hhbChkZWYpXFxuXFx0aXNfb2JqZWN0KGFzbClcXG59XFxuXFxuX3BmX3NmbmxpYl9hc2wobmFtZSkgOj0gYXNsIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRGVmaW5pdGlvblN0cmluZ1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRhc2wgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkRlZmluaXRpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChhc2wpXFxufVxcblxcbiMgUHJvcGVydHkgcGF0aCBwcmVmaXggZm9yIGRpYWdub3N0aWNzLlxcbl9wZl9zZm5saWJfcHJvcChuYW1lKSA6PSBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIiBpZiB7XFxuXFx0b2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkRlZmluaXRpb25TdHJpbmdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zZm5saWJfcHJvcChuYW1lKSA6PSBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uXFxcIiBpZiB7XFxuXFx0b2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkRlZmluaXRpb25TdHJpbmdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ2hpbGQgd29ya2Zsb3dzIGRpcmVjdGx5IGluc2lkZSBhIFN0YXRlcyBibG9jazogW3BhdGgsIHN0YXRlcywgc3RhcnRBdF0gZm9yXFxuIyBldmVyeSBQYXJhbGxlbCBicmFuY2ggYW5kIE1hcCBJdGVtUHJvY2Vzc29yIC8gSXRlcmF0b3IuXFxuX3BmX3NmbmxpYl9raWRzKHBhdGgsIHN0YXRlcykgOj0ga2lkcyBpZiB7XFxuXFx0YnJhbmNoZXMgOj0ge1tjcCwgY3MsIHNhXSB8XFxuXFx0XFx0c29tZSBzbmFtZSwgc3QgaW4gc3RhdGVzXFxuXFx0XFx0aXNfb2JqZWN0KHN0KVxcblxcdFxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQnJhbmNoZXNcXFwiLCBbXSlcXG5cXHRcXHRpc19hcnJheShhcnIpXFxuXFx0XFx0c29tZSBpLCBiIGluIGFyclxcblxcdFxcdGlzX29iamVjdChiKVxcblxcdFxcdGNzIDo9IG9iamVjdC5nZXQoYiwgXFxcIlN0YXRlc1xcXCIsIG51bGwpXFxuXFx0XFx0aXNfb2JqZWN0KGNzKVxcblxcdFxcdHNhIDo9IG9iamVjdC5nZXQoYiwgXFxcIlN0YXJ0QXRcXFwiLCBudWxsKVxcblxcdFxcdGNwIDo9IHNwcmludGYoXFxcIiVzLiVzLkJyYW5jaGVzWyVkXS5TdGF0ZXNcXFwiLCBbcGF0aCwgc25hbWUsIGldKVxcblxcdH1cXG5cXHRwcm9jcyA6PSB7W2NwLCBjcywgc2FdIHxcXG5cXHRcXHRzb21lIHNuYW1lLCBzdCBpbiBzdGF0ZXNcXG5cXHRcXHRpc19vYmplY3Qoc3QpXFxuXFx0XFx0c29tZSBrZXkgaW4gW1xcXCJJdGVtUHJvY2Vzc29yXFxcIiwgXFxcIkl0ZXJhdG9yXFxcIl1cXG5cXHRcXHRwcm9jIDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRcXHRpc19vYmplY3QocHJvYylcXG5cXHRcXHRjcyA6PSBvYmplY3QuZ2V0KHByb2MsIFxcXCJTdGF0ZXNcXFwiLCBudWxsKVxcblxcdFxcdGlzX29iamVjdChjcylcXG5cXHRcXHRzYSA6PSBvYmplY3QuZ2V0KHByb2MsIFxcXCJTdGFydEF0XFxcIiwgbnVsbClcXG5cXHRcXHRjcCA6PSBzcHJpbnRmKFxcXCIlcy4lcy4lcy5TdGF0ZXNcXFwiLCBbcGF0aCwgc25hbWUsIGtleV0pXFxuXFx0fVxcblxcdGtpZHMgOj0gYnJhbmNoZXMgfCBwcm9jc1xcbn1cXG5cXG4jIEV2ZXJ5IFN0YXRlcyBibG9jayBvZiBldmVyeSBzdGF0ZSBtYWNoaW5lOiBbbmFtZSwgcGF0aCwgc3RhdGVzLCBzdGFydEF0XS5cXG5fcGZfc2ZubGliX3Njb3BlMCBjb250YWlucyBbbmFtZSwgXFxcIlN0YXRlc1xcXCIsIHMsIHNhXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5saWJfYXNsKG5hbWUpXFxuXFx0cyA6PSBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c2EgOj0gb2JqZWN0LmdldChhc2wsIFxcXCJTdGFydEF0XFxcIiwgbnVsbClcXG59XFxuXFxuX3BmX3NmbmxpYl9zY29wZTEgY29udGFpbnMgW25hbWUsIGNwLCBjcywgc2FdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBfXSBpbiBfcGZfc2ZubGliX3Njb3BlMFxcblxcdHNvbWUgW2NwLCBjcywgc2FdIGluIF9wZl9zZm5saWJfa2lkcyhwLCBzKVxcbn1cXG5cXG5fcGZfc2ZubGliX3Njb3BlMiBjb250YWlucyBbbmFtZSwgY3AsIGNzLCBzYV0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGUxXFxuXFx0c29tZSBbY3AsIGNzLCBzYV0gaW4gX3BmX3NmbmxpYl9raWRzKHAsIHMpXFxufVxcblxcbl9wZl9zZm5saWJfc2NvcGUzIGNvbnRhaW5zIFtuYW1lLCBjcCwgY3MsIHNhXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgX10gaW4gX3BmX3NmbmxpYl9zY29wZTJcXG5cXHRzb21lIFtjcCwgY3MsIHNhXSBpbiBfcGZfc2ZubGliX2tpZHMocCwgcylcXG59XFxuXFxuIyBwb255dGFpbDogUmVnbyBjYW5ub3QgcmVjdXJzZSBhbmQgdGhlIGVuZ2luZSBoYXMgbm8gd2FsaygpLCBzbyBuZXN0aW5nIGlzXFxuIyBleHBhbmRlZCB0byBkZXB0aCAzIChQYXJhbGxlbC9NYXAgaW5zaWRlIFBhcmFsbGVsL01hcCBpbnNpZGUgUGFyYWxsZWwvTWFwKS5cXG4jIFN0YXRlcyBuZXN0ZWQgZGVlcGVyIGFyZSBzaW1wbHkgbm90IGluc3BlY3RlZDsgYWRkIGEgc2NvcGU0IGxpbmUgdG8gZXh0ZW5kLlxcbl9wZl9zZm5saWJfc2NvcGVzIDo9ICgoX3BmX3NmbmxpYl9zY29wZTAgfCBfcGZfc2ZubGliX3Njb3BlMSkgfCBfcGZfc2ZubGliX3Njb3BlMikgfCBfcGZfc2ZubGliX3Njb3BlM1xcblxcbiMgRXZlcnkgc3RhdGU6IFtuYW1lLCBzY29wZSBwYXRoLCBzY29wZSBzdGF0ZXMsIHN0YXRlIG5hbWUsIHN0YXRlIG9iamVjdF0uXFxuX3BmX3NmbmxpYl9zdGF0ZXMgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGVzXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gc1xcblxcdGlzX29iamVjdChzdClcXG59XFxuXFxuX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSA6PSBzcHJpbnRmKFxcXCIlcy4lcy4lc1xcXCIsIFtfcGZfc2ZubGliX3Byb3AobmFtZSksIHAsIHNuYW1lXSlcXG5cXG5fcGZfc2ZubGliX3R5cGUobmFtZSkgOj0gdCBpZiB7XFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0YXRlTWFjaGluZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh0KVxcbn1cXG5cXG5fcGZfc2ZubGliX3R5cGUobmFtZSkgOj0gXFxcIlNUQU5EQVJEXFxcIiBpZiB7XFxuXFx0bm90IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3RhdGVNYWNoaW5lVHlwZVxcXCIpXFxufVxcblxcbiMgRWZmZWN0aXZlIHF1ZXJ5IGxhbmd1YWdlIG9mIGEgc3RhdGU6IHN0YXRlLWxldmVsLCB0aGVuIHRvcC1sZXZlbCwgdGhlbiBKU09OUGF0aC5cXG5fcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA6PSBxIGlmIHtcXG5cXHRxIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJRdWVyeUxhbmd1YWdlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocSlcXG59XFxuXFxuX3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgOj0gcSBpZiB7XFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KHN0LCBcXFwiUXVlcnlMYW5ndWFnZVxcXCIsIG51bGwpKVxcblxcdHEgOj0gb2JqZWN0LmdldChfcGZfc2ZubGliX2FzbChuYW1lKSwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhxKVxcbn1cXG5cXG5fcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA6PSBcXFwiSlNPTlBhdGhcXFwiIGlmIHtcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoc3QsIFxcXCJRdWVyeUxhbmd1YWdlXFxcIiwgbnVsbCkpXFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KF9wZl9zZm5saWJfYXNsKG5hbWUpLCBcXFwiUXVlcnlMYW5ndWFnZVxcXCIsIG51bGwpKVxcbn1cXG5cXG4jIFByZXNlbmNlIHRlc3QgdGhhdCB0cmVhdHMgaW50cmluc2ljIG1hcmtlciBvYmplY3RzIGFzIHByZXNlbnQuXFxuX3BmX3NmbmxpYl9oYXMob2JqLCBrZXkpIGlmIHtcXG5cXHRvYmplY3QuZ2V0KG9iaiwga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ2hvaWNlIHJ1bGVzIG9mIGEgQ2hvaWNlIHN0YXRlOiBbbmFtZSwgcGF0aCwgc3RhdGVzLCBzdGF0ZSBuYW1lLCBpbmRleCwgcnVsZV0uXFxuX3BmX3NmbmxpYl9jaG9pY2UgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkNob2ljZVxcXCJcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgXFxcIkNob2ljZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRzb21lIGksIGMgaW4gYXJyXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbiMgT3B0aW1pemVkIC8gU0RLIGludGVncmF0aW9uIFRhc2sgc3RhdGVzOiBbbmFtZSwgcGF0aCwgc3RhdGVzLCBzdGF0ZSBuYW1lLFxcbiMgc3RhdGUsIHNlcnZpY2UsIGFwaV0gZm9yIFJlc291cmNlID0gYXJuOjxwYXJ0aXRpb24+OnN0YXRlczo6OjxzZXJ2aWNlPjo8YXBpPi5cXG5fcGZfc2ZubGliX2ludGVncmF0aW9uIGNvbnRhaW5zIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3QsIHN2YywgYXBpXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIlRhc2tcXFwiXFxuXFx0cmVzIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJSZXNvdXJjZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJlcylcXG5cXHRwYXJ0cyA6PSBzcGxpdChyZXMsIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gN1xcblxcdHBhcnRzWzJdID09IFxcXCJzdGF0ZXNcXFwiXFxuXFx0cGFydHNbM10gPT0gXFxcIlxcXCJcXG5cXHRwYXJ0c1s0XSA9PSBcXFwiXFxcIlxcblxcdHN2YyA6PSBwYXJ0c1s1XVxcblxcdGFwaSA6PSBjb25jYXQoXFxcIjpcXFwiLCBhcnJheS5zbGljZShwYXJ0cywgNiwgY291bnQocGFydHMpKSlcXG59XFxuXCJcbiAgfVxuXTtcbiJdfQ==
|