cdk-preflight 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1497,6 +1497,139 @@ exports.BUNDLED_RULES = [
1497
1497
  ],
1498
1498
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_lgskr_url := \"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html\"\n\n# The destination is provably Kinesis two ways: a literal\n# arn:<partition>:kinesis: string, or a Ref/GetAtt that resolve() turns into\n# the logical ID of an in-template AWS::Kinesis::Stream. Scoped to Kinesis —\n# the bench error names \"vendor kinesis\"; other vendors were not measured.\n_pf_lgskr_kinesis_dest(name) if {\n\td := resolve(name, \"Properties.DestinationArn\")\n\tis_string(d)\n\tparts := split(d, \":\")\n\tcount(parts) >= 3\n\tparts[0] == \"arn\"\n\tparts[2] == \"kinesis\"\n}\n\n_pf_lgskr_kinesis_dest(name) if {\n\td := resolve(name, \"Properties.DestinationArn\")\n\tis_string(d)\n\td in resources_of_type(\"AWS::Kinesis::Stream\")\n}\n\n# True absence of RoleArn needs the preprocessed document (see AGENTS.md).\n_pf_lgskr_role_absent(name) if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"RoleArn\", \"__pf_absent\") == \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-logs-subscription-kinesis-role\", \"ERROR\", name,\n\t\"Properties.RoleArn\",\n\t\"The subscription filter targets a Kinesis stream but sets no RoleArn; the service rejects it with \\\"destinationArn for vendor kinesis cannot be used without roleArn\\\"\",\n\t\"Add a RoleArn for a role that logs.amazonaws.com can assume with kinesis:PutRecord on the stream\",\n\t_pf_lgskr_url) if {\n\tsome name in resources_of_type(\"AWS::Logs::SubscriptionFilter\")\n\t_pf_lgskr_kinesis_dest(name)\n\t_pf_lgskr_role_absent(name)\n}\n"
1499
1499
  },
1500
+ {
1501
+ "id": "pf-rds-backtrack",
1502
+ "service": "rds",
1503
+ "severity": "ERROR",
1504
+ "title": "Backtrack only works on aurora-mysql, with a window of at most 259200 seconds",
1505
+ "upstream": "none",
1506
+ "resourceTypes": [
1507
+ "AWS::RDS::DBCluster"
1508
+ ],
1509
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_rdsbt_url := \"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Backtrack.html\"\n\nviolation contains make_diag_full(\"pf-rds-backtrack\", \"ERROR\", name,\n\t\"Properties.BacktrackWindow\",\n\tsprintf(\"Backtrack is only available on aurora-mysql (\\\"Backtrack is not enabled for the %s engine.\\\")\", [eng]),\n\t\"Remove BacktrackWindow, or use the aurora-mysql engine\",\n\t_pf_rdsbt_url) if {\n\tsome name in resources_of_type(\"AWS::RDS::DBCluster\")\n\tn := to_number(resolve(name, \"Properties.BacktrackWindow\"))\n\tn > 0\n\teng := resolve(name, \"Properties.Engine\")\n\tis_string(eng)\n\teng != \"aurora-mysql\"\n}\n\nviolation contains make_diag_full(\"pf-rds-backtrack\", \"ERROR\", name,\n\t\"Properties.BacktrackWindow\",\n\tsprintf(\"BacktrackWindow %v is outside 0-259200 seconds (72 hours)\", [n]),\n\t\"Use at most 259200 seconds\",\n\t_pf_rdsbt_url) if {\n\tsome name in resources_of_type(\"AWS::RDS::DBCluster\")\n\tresolve(name, \"Properties.Engine\") == \"aurora-mysql\"\n\tn := to_number(resolve(name, \"Properties.BacktrackWindow\"))\n\tn > 259200\n}\n"
1510
+ },
1511
+ {
1512
+ "id": "pf-rds-backup-retention-range",
1513
+ "service": "rds",
1514
+ "severity": "ERROR",
1515
+ "title": "BackupRetentionPeriod must be at most 35 days",
1516
+ "upstream": "none",
1517
+ "resourceTypes": [
1518
+ "AWS::RDS::DBInstance"
1519
+ ],
1520
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\nviolation contains make_diag_full(\"pf-rds-backup-retention-range\", \"ERROR\", name,\n\t\"Properties.BackupRetentionPeriod\",\n\tsprintf(\"BackupRetentionPeriod %v exceeds the maximum; RDS rejects it with \\\"Retention period must be between 0 and 35.\\\"\", [n]),\n\t\"Use a retention period of 35 days or less\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tn := to_number(resolve(name, \"Properties.BackupRetentionPeriod\"))\n\tn > 35\n}\n"
1521
+ },
1522
+ {
1523
+ "id": "pf-rds-backup-window-duration",
1524
+ "service": "rds",
1525
+ "severity": "ERROR",
1526
+ "title": "The backup window must be at least 30 minutes",
1527
+ "upstream": "none",
1528
+ "resourceTypes": [
1529
+ "AWS::RDS::DBInstance"
1530
+ ],
1531
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# \"HH:MM\" -> minutes of day; undefined for anything else. Digits go\n# through a lookup table because to_number rejects leading zeros\n# (to_number(\"03\") is undefined in the engine's Rego build).\n_pf_rdswd_digit := {\"0\": 0, \"1\": 1, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 5, \"6\": 6, \"7\": 7, \"8\": 8, \"9\": 9}\n\n_pf_rdswd_min(t) := m if {\n\tis_string(t)\n\tregex.match(`^([01][0-9]|2[0-3]):[0-5][0-9]$`, t)\n\th := (_pf_rdswd_digit[substring(t, 0, 1)] * 10) + _pf_rdswd_digit[substring(t, 1, 1)]\n\tmi := (_pf_rdswd_digit[substring(t, 3, 1)] * 10) + _pf_rdswd_digit[substring(t, 4, 1)]\n\tm := (h * 60) + mi\n}\n\nviolation contains make_diag_full(\"pf-rds-backup-window-duration\", \"ERROR\", name,\n\t\"Properties.PreferredBackupWindow\",\n\tsprintf(\"PreferredBackupWindow '%s' is only %v minutes; RDS requires at least 30 (\\\"Backup window must be at least 30 minutes.\\\")\", [w, d]),\n\t\"Widen the window to 30 minutes or more\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tw := resolve(name, \"Properties.PreferredBackupWindow\")\n\tis_string(w)\n\tparts := split(w, \"-\")\n\tcount(parts) == 2\n\ts := _pf_rdswd_min(parts[0])\n\te := _pf_rdswd_min(parts[1])\n\td := ((e - s) + 1440) % 1440\n\td < 30\n}\n"
1532
+ },
1533
+ {
1534
+ "id": "pf-rds-backup-window-format",
1535
+ "service": "rds",
1536
+ "severity": "ERROR",
1537
+ "title": "PreferredBackupWindow must be hh24:mi-hh24:mi",
1538
+ "upstream": "none",
1539
+ "resourceTypes": [
1540
+ "AWS::RDS::DBInstance"
1541
+ ],
1542
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\nviolation contains make_diag_full(\"pf-rds-backup-window-format\", \"ERROR\", name,\n\t\"Properties.PreferredBackupWindow\",\n\tsprintf(\"PreferredBackupWindow '%s' is not hh24:mi-hh24:mi (24H clock UTC); RDS rejects it at create time\", [w]),\n\t\"Use the hh24:mi-hh24:mi form, e.g. 03:00-04:00\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tw := resolve(name, \"Properties.PreferredBackupWindow\")\n\tis_string(w)\n\tnot regex.match(`^([01][0-9]|2[0-3]):[0-5][0-9]-([01][0-9]|2[0-3]):[0-5][0-9]$`, w)\n}\n"
1543
+ },
1544
+ {
1545
+ "id": "pf-rds-dbname-format",
1546
+ "service": "rds",
1547
+ "severity": "ERROR",
1548
+ "title": "postgres DBName must begin with a letter",
1549
+ "upstream": "none",
1550
+ "resourceTypes": [
1551
+ "AWS::RDS::DBInstance"
1552
+ ],
1553
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Only the letter-start half of the service message is claimed: the\n# \"only alphanumeric\" half is measurably wrong (bench_db deploys).\nviolation contains make_diag_full(\"pf-rds-dbname-format\", \"ERROR\", name,\n\t\"Properties.DBName\",\n\tsprintf(\"DBName '%s' does not begin with a letter (\\\"DBName must begin with a letter\\\"); the CreateDBInstance call fails\", [dn]),\n\t\"Start the database name with a letter\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tresolve(name, \"Properties.Engine\") == \"postgres\"\n\tdn := resolve(name, \"Properties.DBName\")\n\tis_string(dn)\n\tnot regex.match(`^[a-zA-Z]`, dn)\n}\n"
1554
+ },
1555
+ {
1556
+ "id": "pf-rds-gp3-iops-storage-threshold",
1557
+ "service": "rds",
1558
+ "severity": "ERROR",
1559
+ "title": "gp3 below 400 GiB cannot take custom Iops or StorageThroughput (postgres/mysql)",
1560
+ "upstream": "none",
1561
+ "resourceTypes": [
1562
+ "AWS::RDS::DBInstance"
1563
+ ],
1564
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_rdsgp3_has(name, key) if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, key, \"__pf_absent\") != \"__pf_absent\"\n}\n\n_pf_rdsgp3_custom(name) if _pf_rdsgp3_has(name, \"Iops\")\n\n_pf_rdsgp3_custom(name) if _pf_rdsgp3_has(name, \"StorageThroughput\")\n\nviolation contains make_diag_full(\"pf-rds-gp3-iops-storage-threshold\", \"ERROR\", name,\n\t\"Properties.Iops\",\n\tsprintf(\"gp3 with %v GiB cannot take custom Iops/StorageThroughput below 400 GiB for engine %s (\\\"You can't specify IOPS or storage throughput ... less than 400.\\\")\", [s, eng]),\n\t\"Drop the custom Iops/StorageThroughput, or allocate at least 400 GiB\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\teng := resolve(name, \"Properties.Engine\")\n\teng in {\"postgres\", \"mysql\"}\n\tresolve(name, \"Properties.StorageType\") == \"gp3\"\n\ts := to_number(resolve(name, \"Properties.AllocatedStorage\"))\n\ts < 400\n\t_pf_rdsgp3_custom(name)\n}\n"
1565
+ },
1566
+ {
1567
+ "id": "pf-rds-io1-iops-ratio",
1568
+ "service": "rds",
1569
+ "severity": "ERROR",
1570
+ "title": "postgres io1 Iops may not exceed 50 per GiB of storage",
1571
+ "upstream": "none",
1572
+ "resourceTypes": [
1573
+ "AWS::RDS::DBInstance"
1574
+ ],
1575
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Only the benched engine/type pair; the historical 64000 IOPS cap is\n# gone (80000 deployed clean at ratio 40 on 2026-09-03).\nviolation contains make_diag_full(\"pf-rds-io1-iops-ratio\", \"ERROR\", name,\n\t\"Properties.Iops\",\n\tsprintf(\"Iops %v is %v per GiB for %v GiB; postgres io1 allows at most 50 (\\\"Invalid iops to storage (GiB) ratio\\\")\", [n, n / s, s]),\n\t\"Keep Iops at or below 50 x AllocatedStorage\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tresolve(name, \"Properties.Engine\") == \"postgres\"\n\tresolve(name, \"Properties.StorageType\") == \"io1\"\n\tn := to_number(resolve(name, \"Properties.Iops\"))\n\ts := to_number(resolve(name, \"Properties.AllocatedStorage\"))\n\ts > 0\n\tn > s * 50\n}\n"
1576
+ },
1577
+ {
1578
+ "id": "pf-rds-iops-required",
1579
+ "service": "rds",
1580
+ "severity": "ERROR",
1581
+ "title": "io1 and io2 storage require the Iops property",
1582
+ "upstream": "none",
1583
+ "resourceTypes": [
1584
+ "AWS::RDS::DBInstance"
1585
+ ],
1586
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\nviolation contains make_diag_full(\"pf-rds-iops-required\", \"ERROR\", name,\n\t\"Properties.Iops\",\n\tsprintf(\"StorageType %s requires Iops (\\\"The storage type %s requires iops to be specified.\\\")\", [st, st]),\n\t\"Set Iops alongside the provisioned-IOPS storage type\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tst := resolve(name, \"Properties.StorageType\")\n\tst in {\"io1\", \"io2\"}\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"Iops\", \"__pf_absent\") == \"__pf_absent\"\n}\n"
1587
+ },
1588
+ {
1589
+ "id": "pf-rds-password-valid",
1590
+ "service": "rds",
1591
+ "severity": "ERROR",
1592
+ "title": "MasterUserPassword must be at least 8 characters without '/', '@', '\\\"' or spaces",
1593
+ "upstream": "none",
1594
+ "resourceTypes": [
1595
+ "AWS::RDS::DBInstance",
1596
+ "AWS::RDS::DBCluster"
1597
+ ],
1598
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_rdspw_url := \"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\"\n\n_pf_rdspw_types := {\"AWS::RDS::DBInstance\", \"AWS::RDS::DBCluster\"}\n\n_pf_rdspw_forbidden := {\"/\", \"@\", \"\\\"\", \" \"}\n\nviolation contains make_diag_full(\"pf-rds-password-valid\", \"ERROR\", name,\n\t\"Properties.MasterUserPassword\",\n\t\"MasterUserPassword is shorter than 8 characters; RDS rejects it at create time\",\n\t\"Use 8+ characters, or a Secrets Manager reference\",\n\t_pf_rdspw_url) if {\n\tsome rtype in _pf_rdspw_types\n\tsome name in resources_of_type(rtype)\n\tpw := resolve(name, \"Properties.MasterUserPassword\")\n\tis_string(pw)\n\tcount(pw) < 8\n}\n\nviolation contains make_diag_full(\"pf-rds-password-valid\", \"ERROR\", name,\n\t\"Properties.MasterUserPassword\",\n\tsprintf(\"MasterUserPassword contains '%s'; RDS forbids '/', '@', double quotes and spaces\", [ch]),\n\t\"Remove the forbidden character, or use a Secrets Manager reference\",\n\t_pf_rdspw_url) if {\n\tsome rtype in _pf_rdspw_types\n\tsome name in resources_of_type(rtype)\n\tpw := resolve(name, \"Properties.MasterUserPassword\")\n\tis_string(pw)\n\tsome ch in _pf_rdspw_forbidden\n\tcontains(pw, ch)\n}\n"
1599
+ },
1600
+ {
1601
+ "id": "pf-rds-port-range",
1602
+ "service": "rds",
1603
+ "severity": "ERROR",
1604
+ "title": "The database port must be within 1150-65535",
1605
+ "upstream": "none",
1606
+ "resourceTypes": [
1607
+ "AWS::RDS::DBInstance"
1608
+ ],
1609
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_rdsport_out(n) if n < 1150\n\n_pf_rdsport_out(n) if n > 65535\n\nviolation contains make_diag_full(\"pf-rds-port-range\", \"ERROR\", name,\n\t\"Properties.Port\",\n\tsprintf(\"Port %v is outside 1150-65535 (\\\"Invalid endpoint port %v. Valid range is: 1150-65535\\\")\", [n, n]),\n\t\"Pick a port between 1150 and 65535\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tn := to_number(resolve(name, \"Properties.Port\"))\n\t_pf_rdsport_out(n)\n}\n"
1610
+ },
1611
+ {
1612
+ "id": "pf-rds-serverless-v2-capacity",
1613
+ "service": "rds",
1614
+ "severity": "ERROR",
1615
+ "title": "Serverless v2 MinCapacity must not exceed MaxCapacity, and MaxCapacity is at most 256",
1616
+ "upstream": "none",
1617
+ "resourceTypes": [
1618
+ "AWS::RDS::DBCluster"
1619
+ ],
1620
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_rdssv2_url := \"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html\"\n\nviolation contains make_diag_full(\"pf-rds-serverless-v2-capacity\", \"ERROR\", name,\n\t\"Properties.ServerlessV2ScalingConfiguration.MinCapacity\",\n\tsprintf(\"MinCapacity %v exceeds MaxCapacity %v (\\\"minimum capacity must be less than or equal to maximum capacity\\\")\", [mn, mx]),\n\t\"Keep MinCapacity <= MaxCapacity\",\n\t_pf_rdssv2_url) if {\n\tsome name in resources_of_type(\"AWS::RDS::DBCluster\")\n\tmn := to_number(resolve(name, \"Properties.ServerlessV2ScalingConfiguration.MinCapacity\"))\n\tmx := to_number(resolve(name, \"Properties.ServerlessV2ScalingConfiguration.MaxCapacity\"))\n\tmn > mx\n}\n\nviolation contains make_diag_full(\"pf-rds-serverless-v2-capacity\", \"ERROR\", name,\n\t\"Properties.ServerlessV2ScalingConfiguration.MaxCapacity\",\n\tsprintf(\"MaxCapacity %v is above 256 ACUs (\\\"The valid scaling range for this cluster is 0.0 to 256.0.\\\")\", [mx]),\n\t\"Use at most 256 ACUs\",\n\t_pf_rdssv2_url) if {\n\tsome name in resources_of_type(\"AWS::RDS::DBCluster\")\n\tmx := to_number(resolve(name, \"Properties.ServerlessV2ScalingConfiguration.MaxCapacity\"))\n\tmx > 256\n}\n"
1621
+ },
1622
+ {
1623
+ "id": "pf-rds-window-overlap",
1624
+ "service": "rds",
1625
+ "severity": "ERROR",
1626
+ "title": "The backup window and the maintenance window must not overlap",
1627
+ "upstream": "none",
1628
+ "resourceTypes": [
1629
+ "AWS::RDS::DBInstance"
1630
+ ],
1631
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# \"HH:MM\" -> minutes of day; undefined for anything else. Digits go\n# through a lookup table because to_number rejects leading zeros\n# (to_number(\"03\") is undefined in the engine's Rego build).\n_pf_rdswo_digit := {\"0\": 0, \"1\": 1, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 5, \"6\": 6, \"7\": 7, \"8\": 8, \"9\": 9}\n\n_pf_rdswo_min(t) := m if {\n\tis_string(t)\n\tregex.match(`^([01][0-9]|2[0-3]):[0-5][0-9]$`, t)\n\th := (_pf_rdswo_digit[substring(t, 0, 1)] * 10) + _pf_rdswo_digit[substring(t, 1, 1)]\n\tmi := (_pf_rdswo_digit[substring(t, 3, 1)] * 10) + _pf_rdswo_digit[substring(t, 4, 1)]\n\tm := (h * 60) + mi\n}\n\n# The backup window recurs daily, so a same-day maintenance window\n# overlaps whenever the time-of-day intervals intersect.\nviolation contains make_diag_full(\"pf-rds-window-overlap\", \"ERROR\", name,\n\t\"Properties.PreferredBackupWindow\",\n\tsprintf(\"Backup window %s overlaps maintenance window %s; RDS rejects the pair (\\\"The backup window and maintenance window must not overlap.\\\")\", [bw, mw]),\n\t\"Separate the two windows in time\",\n\t\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\") if {\n\tsome name in resources_of_type(\"AWS::RDS::DBInstance\")\n\tbw := resolve(name, \"Properties.PreferredBackupWindow\")\n\tis_string(bw)\n\tbp := split(bw, \"-\")\n\tcount(bp) == 2\n\tbs := _pf_rdswo_min(bp[0])\n\tbe := _pf_rdswo_min(bp[1])\n\tbs < be\n\tmw := resolve(name, \"Properties.PreferredMaintenanceWindow\")\n\tis_string(mw)\n\tmp := split(lower(mw), \"-\")\n\tcount(mp) == 2\n\tm1 := split(mp[0], \":\")\n\tm2 := split(mp[1], \":\")\n\tcount(m1) == 3\n\tcount(m2) == 3\n\tm1[0] == m2[0]\n\tms := _pf_rdswo_min(sprintf(\"%s:%s\", [m1[1], m1[2]]))\n\tme := _pf_rdswo_min(sprintf(\"%s:%s\", [m2[1], m2[2]]))\n\tms < me\n\tbs < me\n\tms < be\n}\n"
1632
+ },
1500
1633
  {
1501
1634
  "id": "pf-route53-alias-cloudfront-zone-id",
1502
1635
  "service": "route53",
@@ -1796,4 +1929,4 @@ exports.BUNDLED_RULES = [
1796
1929
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfn_fix := \"Point Next/Default/Choices at an existing state name\"\n\n_pf_sfn_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-states.html\"\n\n_pf_sfn_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_sfn_defined(asl) := {sn | some sn, _ in object.get(asl, \"States\", {})}\n\n# NOTE: a dangling StartAt is deliberately NOT checked here — the engine's\n# built-in rule E3601 (ERROR/CFN_LINT) already covers it. Verified against\n# @aws/cloudformation-validate 1.7.0-beta on 2026-09-01: E3601 fires for\n# StartAt only and does not check Next/Default/Choices, which is what this\n# rule adds.\n\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\t\"Properties.DefinitionString\",\n\tsprintf(\"state '%s' references state '%s' via %s, but no state with that name is defined\", [sname, target, key]),\n\t_pf_sfn_fix, _pf_sfn_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfn_asl(name)\n\tsome sname, st in object.get(asl, \"States\", {})\n\tis_object(st)\n\tsome key in {\"Next\", \"Default\"}\n\ttarget := object.get(st, key, null)\n\tis_string(target)\n\tnot target in _pf_sfn_defined(asl)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\t\"Properties.DefinitionString\",\n\tsprintf(\"state '%s' has a Choice rule referencing state '%s', but no state with that name is defined\", [sname, target]),\n\t_pf_sfn_fix, _pf_sfn_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfn_asl(name)\n\tsome sname, st in object.get(asl, \"States\", {})\n\tis_object(st)\n\tchoices := object.get(st, \"Choices\", [])\n\tis_array(choices)\n\tsome c in choices\n\tis_object(c)\n\ttarget := object.get(c, \"Next\", null)\n\tis_string(target)\n\tnot target in _pf_sfn_defined(asl)\n}\n"
1797
1930
  }
1798
1931
  ];
1799
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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UUFDdkYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsaUJBQWlCO1NBQ2xCO1FBQ0QsTUFBTSxFQUFFLDYrQ0FBNitDO0tBQ3QvQztJQUNEO1FBQ0UsSUFBSSxFQUFFLDBCQUEwQjtRQUNoQyxTQUFTLEVBQUUsZUFBZTtRQUMxQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsZ0lBQWdJO1FBQ3pJLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLGtDQUFrQztTQUNuQztRQUNELE1BQU0sRUFBRSwyK0RBQTIrRDtLQUNwL0Q7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHNjcmlwdHMvYnVuZGxlLXJ1bGVzLnRzIGZyb20gcnVsZXMvKiouIERvIG5vdCBlZGl0IGJ5IGhhbmQuXG4vLyB+fiBSZWdlbmVyYXRlIHdpdGg6IG5weCBwcm9qZW4gYnVuZGxlLXJ1bGVzXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVkUnVsZURhdGEge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwc3RyZWFtOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWdvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCVU5ETEVEX1JVTEVTOiBCdW5kbGVkUnVsZURhdGFbXSA9IFtcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY2Nlc3MgbG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgYSByZXF1ZXN0IGlkIHZhcmlhYmxlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZm9ybWF0IHN0cmluZyBpcyBvcGFxdWUgdG8gZXZlcnkgc2NoZW1hIGxheWVyOyB0aGUgc2VydmljZSByZXF1aXJlcyBhXFxuIyByZXF1ZXN0IGlkIHZhcmlhYmxlIHNvbWV3aGVyZSBpbnNpZGUgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NMb2dTZXR0aW5nLkZvcm1hdFxcXCIsXFxuXFx0XFxcIkFjY2VzcyBsb2cgZm9ybWF0IGhhcyBubyByZXF1ZXN0IGlkIHZhcmlhYmxlOyB0aGUgc3RhZ2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgTG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgZWl0aGVyICRjb250ZXh0LnJlcXVlc3RJZCBvciAkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkICRjb250ZXh0LnJlcXVlc3RJZCAob3IgJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWQpIHRvIHRoZSBhY2Nlc3MgbG9nIGZvcm1hdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXQtdXAtbG9nZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVxcXCIpXFxuXFx0Zm10IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZXNzTG9nU2V0dGluZy5Gb3JtYXRcXFwiKVxcblxcdGlzX3N0cmluZyhmbXQpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LnJlcXVlc3RJZFxcXCIpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hdXRob3JpemVyLXR0bC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kcyB0b3BzIG91dCBhdCAzNjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgdGhlIFRUTCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIDM2MDAgY2VpbGluZyBpc1xcbiMgb25seSBpbiB0aGUgc2VydmljZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWF1dGhvcml6ZXItdHRsLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBdXRob3JpemVyIHJlc3VsdCBUVEwgb3V0c2lkZSBhbGxvd2FibGUgcmFuZ2UuIFRUTCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzLlxcXFxcXFwiXFxcIiwgW3R0bF0pLFxcblxcdFxcXCJVc2UgYSBUVEwgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0dHRsIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHNcXFwiKSlcXG5cXHR0dGwgPiAzNjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVycyBuZWVkIFByb3ZpZGVyQVJOc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIENvZ25pdG8gYXV0aG9yaXplciB2YWxpZGF0ZXMgdG9rZW5zIGFnYWluc3QgdGhlIHVzZXIgcG9vbHMgbGlzdGVkIGluXFxuIyBQcm92aWRlckFSTnM7IHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnY3BhX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm92aWRlckFSTnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3ZpZGVyQVJOc1xcXCIsXFxuXFx0XFxcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIGhhcyBubyBQcm92aWRlckFSTnM7IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvdmlkZXJBUk5zIGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFByb3ZpZGVyQVJOcyB0byB0aGUgQ29nbml0byB1c2VyIHBvb2wgQVJOKHMpIHRoaXMgYXV0aG9yaXplciBzaG91bGQgdXNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDT0dOSVRPX1VTRVJfUE9PTFNcXFwiXFxuXFx0X3BmX2FwZ2NwYV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctZGVwbG95bWVudC1uby1tZXRob2RzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIERlcGxveW1lbnQgbmVlZHMgYXQgbGVhc3Qgb25lIE1ldGhvZCBvbiBpdHMgUkVTVCBBUElcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRGVwbG95aW5nIGFuIEFQSSB3aXRoIHplcm8gbWV0aG9kcyBmYWlscy4gSnVkZ2VkIG9ubHkgd2hlbiB0aGUgd2hvbGVcXG4jIHBpY3R1cmUgaXMgaW4gdGhpcyB0ZW1wbGF0ZTogdGhlIGFwaSBpcyBhIHNpYmxpbmcgcmVzb3VyY2UgYW5kIGl0IGhhcyBub1xcbiMgT3BlbkFQSSBib2R5ICh3aGljaCB3b3VsZCBkZWZpbmUgbWV0aG9kcyBpbnZpc2libHkpLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnZG5tX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2FwZ2RubV9zZXJ2ZWQoYXBpKSBpZiB7XFxuXFx0c29tZSBtIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0cmVzb2x2ZShtLCBcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiKSA9PSBhcGlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1kZXBsb3ltZW50LW5vLW1ldGhvZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUkVTVCBBUEkgJyVzJyBoYXMgbm8gQVdTOjpBcGlHYXRld2F5OjpNZXRob2QgaW4gdGhpcyB0ZW1wbGF0ZTsgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBSRVNUIEFQSSBkb2Vzbid0IGNvbnRhaW4gYW55IG1ldGhvZHNcXFxcXFxcIlxcXCIsIFthcGldKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCB0byB0aGUgQVBJIGJlZm9yZSBkZXBsb3lpbmcgaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWRlcGxveW1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFxcXCIpXFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVMzTG9jYXRpb25cXFwiKVxcblxcdG5vdCBfcGZfYXBnZG5tX3NlcnZlZChhcGkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbi1NT0NLIGludGVncmF0aW9ucyBuZWVkIEludGVncmF0aW9uSHR0cE1ldGhvZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IGludGVncmF0aW9uIHR5cGUgZXhjZXB0IE1PQ0sgY2FsbHMgYSBiYWNrZW5kIGFuZCBuZWVkcyB0aGUgSFRUUFxcbiMgbWV0aG9kIHRvIGNhbGwgaXQgd2l0aC4gVmVyaWZpZWQgZm9yIGFsbCBmb3VyIG5vbi1NT0NLIHR5cGVzLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnaWhtX3R5cGVzIDo9IHtcXFwiQVdTXFxcIiwgXFxcIkFXU19QUk9YWVxcXCIsIFxcXCJIVFRQXFxcIiwgXFxcIkhUVFBfUFJPWFlcXFwifVxcblxcbl9wZl9hcGdpaG1fbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0aW50ZWcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkludGVncmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGludGVnKVxcblxcdG9iamVjdC5nZXQoaW50ZWcsIFxcXCJJbnRlZ3JhdGlvbkh0dHBNZXRob2RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW50ZWdyYXRpb24gdHlwZSAnJXMnIGhhcyBubyBJbnRlZ3JhdGlvbkh0dHBNZXRob2Q7IHRoZSBtZXRob2QgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFbnVtZXJhdGlvbiB2YWx1ZSBmb3IgSHR0cE1ldGhvZCBtdXN0IGJlIG5vbi1lbXB0eVxcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRcXFwiU2V0IEludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZCAoUE9TVCBmb3IgQVdTL0FXU19QUk9YWSBMYW1iZGEgYmFja2VuZHMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tZXRob2QuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb24uVHlwZVxcXCIpXFxuXFx0dCBpbiBfcGZfYXBnaWhtX3R5cGVzXFxuXFx0X3BmX2FwZ2lobV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbWV0aG9kLWF1dGhvcml6ZXItaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNVU1RPTSBhbmQgQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6YXRpb24gbmVlZCBBdXRob3JpemVySWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGF1dGhvcml6ZXItYmFja2VkIGF1dGhvcml6YXRpb24gdHlwZXMgcG9pbnQgYXQgYW4gQXV0aG9yaXplcjsgdGhlXFxuIyBtZXRob2QgY3JlYXRlIHJlamVjdHMgdGhlbSB3aXRob3V0IG9uZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ21haWRfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tZXRob2QtYXV0aG9yaXplci1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplcklkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemF0aW9uVHlwZSAnJXMnIGlzIHNldCBidXQgQXV0aG9yaXplcklkIGlzIG5vdDsgdGhlIG1ldGhvZCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgYXV0aG9yaXplciBJRCBzcGVjaWZpZWQuIFNldHRpbmcgdGhlIGF1dGhvcml6YXRpb24gdHlwZSB0byBDVVNUT00gb3IgQ09HTklUT19VU0VSX1BPT0xTIHJlcXVpcmVzIGEgdmFsaWQgYXV0aG9yaXplci5cXFxcXFxcIlxcXCIsIFthdF0pLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplcklkIHRvIHRoZSBhdXRob3JpemVyIHRoaXMgbWV0aG9kIHNob3VsZCB1c2UsIG9yIGNoYW5nZSBBdXRob3JpemF0aW9uVHlwZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0YXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemF0aW9uVHlwZVxcXCIpXFxuXFx0YXQgaW4ge1xcXCJDVVNUT01cXFwiLCBcXFwiQ09HTklUT19VU0VSX1BPT0xTXFxcIn1cXG5cXHRfcGZfYXBnbWFpZF9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbW9kZWwtc2NoZW1hLXR5cGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1vZGVsIHNjaGVtYSAndHlwZScgbXVzdCBiZSBhIEpTT04gU2NoZW1hIGRyYWZ0LTQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIFNjaGVtYSBib2R5IGlzIG9wYXF1ZSBKU09OIHRvIGV2ZXJ5IHNjaGVtYSBsYXllci4gRnVsbCBkcmFmdC00XFxuIyB2YWxpZGF0aW9uIGlzIG91dCBvZiBzY29wZTsgYSBsaXRlcmFsIHRvcC1sZXZlbCBcXFwidHlwZVxcXCIgb3V0c2lkZSB0aGVcXG4jIGRyYWZ0LTQgc2V0IChhIGNvbW1vbiB0eXBvIGxpa2UgXFxcIlN0cmluZ1xcXCIpIGlzIHByb3ZhYmx5IGZhdGFsLlxcbl9wZl9hcGdtc3RfdHlwZXMgOj0ge1xcXCJhcnJheVxcXCIsIFxcXCJib29sZWFuXFxcIiwgXFxcImludGVnZXJcXFwiLCBcXFwibnVsbFxcXCIsIFxcXCJudW1iZXJcXFwiLCBcXFwib2JqZWN0XFxcIiwgXFxcInN0cmluZ1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tb2RlbC1zY2hlbWEtdHlwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZW1hLnR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIk1vZGVsIHNjaGVtYSB0eXBlICclcycgaXMgbm90IGEgSlNPTiBTY2hlbWEgZHJhZnQtNCB0eXBlOyB0aGUgbW9kZWwgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIG1vZGVsIHNwZWNpZmllZDogVmFsaWRhdGlvbiBSZXN1bHQ6IHdhcm5pbmdzIDogW10sIGVycm9ycyA6IFtJbnZhbGlkIG1vZGVsIHNjaGVtYSBzcGVjaWZpZWRdXFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIGFycmF5LCBib29sZWFuLCBpbnRlZ2VyLCBudWxsLCBudW1iZXIsIG9iamVjdCwgc3RyaW5nIChsb3dlcmNhc2UpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tb2RlbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFxcXCIpXFxuXFx0c2NoIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZW1hXFxcIilcXG5cXHRpc19vYmplY3Qoc2NoKVxcblxcdHQgOj0gb2JqZWN0LmdldChzY2gsIFxcXCJ0eXBlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHR0ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRub3QgdCBpbiBfcGZfYXBnbXN0X3R5cGVzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctcmVzb3VyY2UtcGF0aC1wYXJ0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXRoUGFydCBhbGxvd3MgYS16QS1aMC05Ll8tOiBvciBvbmUgY3VybHktYnJhY2UgdmFyaWFibGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFZhbGlkIGZvcm1zIHBlciB0aGUgc2VydmljZSBlcnJvciBpdHNlbGY6IHBsYWluIFthLXpBLVowLTkuXzotXSssIG9yIGFcXG4jIHdob2xlLXBhcnQgdmFyaWFibGUge25hbWV9IC8gZ3JlZWR5IHtuYW1lK30uXFxuX3BmX2FwZ3JwcF9vayhwcCkgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Ll86LV0rJGAsIHBwKVxcblxcbl9wZl9hcGdycHBfb2socHApIGlmIHJlZ2V4Lm1hdGNoKGBeXFxcXHtbYS16QS1aMC05Ll8tXStcXFxcKz9cXFxcfSRgLCBwcClcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXJlc291cmNlLXBhdGgtcGFydFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF0aFBhcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBhdGhQYXJ0ICclcycgaGFzIGNoYXJhY3RlcnMgdGhlIHNlcnZpY2UgcmVqZWN0czsgdGhlIHJlc291cmNlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUmVzb3VyY2UncyBwYXRoIHBhcnQgb25seSBhbGxvdyBhLXpBLVowLTkuXy06IG9yIGEgdmFsaWQgZ3JlZWR5IHBhdGggdmFyaWFibGUgYW5kIGN1cmx5IGJyYWNlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kLlxcXFxcXFwiXFxcIiwgW3BwXSksXFxuXFx0XFxcIlVzZSBvbmx5IGEtekEtWjAtOS5fLTogaW4gdGhlIHBhdGggcGFydCwgb3IgYSBzaW5nbGUge3ZhcmlhYmxlfSAvIHtncmVlZHkrfSBmb3JtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1yZXNvdXJjZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVxcXCIpXFxuXFx0cHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXRoUGFydFxcXCIpXFxuXFx0aXNfc3RyaW5nKHBwKVxcblxcdG5vdCBfcGZfYXBncnBwX29rKHBwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXN0YWdlLXZhcmlhYmxlLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFnZSB2YXJpYWJsZSB2YWx1ZXMgaGF2ZSBhIHJlc3RyaWN0ZWQgY2hhcmFjdGVyIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQWxsb3dlZCBwZXIgdGhlIHNlcnZpY2UgZXJyb3IgaXRzZWxmOiBhbHBoYW51bWVyaWNzIHBsdXMgc3BhY2UgYW5kXFxuIyAtIC4gXyA6IC8gPyAmID0gLCAobm90ZTogc3BhY2UgSVMgbGVnYWwpLlxcbl9wZl9hcGdzdnZfb2sodikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fOi8/Jj0sLV0qJGAsIHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1zdGFnZS12YXJpYWJsZS12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5WYXJpYWJsZXMuJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIlN0YWdlIHZhcmlhYmxlICclcycgaGFzIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYWxsb3dlZCBzZXQ7IHRoZSBzdGFnZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgc3RhZ2UgdmFyaWFibGUgdmFsdWUgb2Yga2V5ICVzLiAgUGxlYXNlIHVzZSB2YWx1ZXMgd2l0aCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIHN5bWJvbHMgJyAnLCAtJywgJy4nLCAnXycsICc6JywgJy8nLCAnPycsICcmJywgJz0nLCBhbmQgJywnLlxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiUmVzdHJpY3QgdGhlIHZhbHVlIHRvIGFscGhhbnVtZXJpY3MgYW5kICcgJywgLSwgLiwgXywgOiwgLywgPywgJiwgPSwgLFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdGFnZS12YXJpYWJsZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcXFwiKVxcblxcdHZhcnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WYXJpYWJsZXNcXFwiKVxcblxcdGlzX29iamVjdCh2YXJzKVxcblxcdHNvbWUgaywgdiBpbiB2YXJzXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IF9wZl9hcGdzdnZfb2sodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVE9LRU4gYXV0aG9yaXplcnMgbmVlZCBJZGVudGl0eVNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUT0tFTiBhdXRob3JpemVycyByZWFkIHRoZSB0b2tlbiBmcm9tIHRoZSBoZWFkZXIgbmFtZWQgYnkgSWRlbnRpdHlTb3VyY2UsXFxuIyBzbyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gUkVRVUVTVCBhdXRob3JpemVycyBhcmUgb3V0IG9mXFxuIyBzY29wZTogdGhleSBuZWVkIGl0IG9ubHkgd2l0aCBjYWNoaW5nIGVuYWJsZWQgKHVubWVhc3VyZWQpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBndGlzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJZGVudGl0eVNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRlbnRpdHlTb3VyY2VcXFwiLFxcblxcdFxcXCJUT0tFTiBhdXRob3JpemVyIGhhcyBubyBJZGVudGl0eVNvdXJjZTsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJZGVudGl0eVNvdXJjZSBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBJZGVudGl0eVNvdXJjZSwgZS5nLiBtZXRob2QucmVxdWVzdC5oZWFkZXIuQXV0aG9yaXphdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVE9LRU5cXFwiXFxuXFx0X3BmX2FwZ3Rpc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hcGktbmFtZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBcGkgbmVlZHMgYSBOYW1lIHVubGVzcyBhbiBPcGVuQVBJIGJvZHkgcHJvdmlkZXMgb25lXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNaXJyb3JzIGNmbi1saW50IEUzNjYwIGZvciBSRVNUIEFQSXMsIHdoaWNoIGhhcyBubyBBcGlHYXRld2F5VjJcXG4jIGNvdW50ZXJwYXJ0OiB3aXRob3V0IGEgQm9keSB0byBjYXJyeSBpbmZvLnRpdGxlLCBOYW1lIGlzIG1hbmRhdG9yeS5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItYXBpLW5hbWUtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdFxcXCJBcGkgaGFzIG5vIE5hbWUgYW5kIG5vIE9wZW5BUEkgYm9keSB0byB0YWtlIG9uZSBmcm9tOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBBUEkgbmFtZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBOYW1lLCBvciBwcm92aWRlIHRoZSBkZWZpbml0aW9uIHZpYSBCb2R5IC8gQm9keVMzTG9jYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXBpLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIk5hbWVcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJCb2R5UzNMb2NhdGlvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFXU19QUk9YWSBpbnRlZ3JhdGlvbnMgdGFrZSBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjAgb3IgMi4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNjb3BlZCB0byBpbnRlZ3JhdGlvbnMgd2hvc2UgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUCAodGhlIGJlbmNoZWRcXG4jIHNoYXBlKTsgV2ViU29ja2V0IGludGVncmF0aW9ucyBhcmUgb3V0IG9mIHNjb3BlLlxcbl9wZl9hZ3YyYXBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGF5bG9hZEZvcm1hdFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIGludGVncmF0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVW5zdXBwb3J0ZWQgUGF5bG9hZEZvcm1hdFZlcnNpb246ICVzXFxcXFxcXCJcXFwiLCBbcHYsIHB2XSksXFxuXFx0XFxcIlVzZSAxLjAgb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkFXU19QUk9YWVxcXCJcXG5cXHRfcGZfYWd2MmFwcF9odHRwX2FwaShuYW1lKVxcblxcdHB2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiKVxcblxcdGlzX3N0cmluZyhwdilcXG5cXHRub3QgcHYgaW4ge1xcXCIxLjBcXFwiLCBcXFwiMi4wXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWNvcnMtY3JlZGVudGlhbHMtd2lsZGNhcmRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09SUyBBbGxvd0NyZWRlbnRpYWxzIGNhbm5vdCBwYWlyIHdpdGggYSB3aWxkY2FyZCBvcmlnaW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBDT1JTIHNwZWMgZm9yYmlkcyBjcmVkZW50aWFsZWQgcmVxdWVzdHMgYWdhaW5zdCBhIHdpbGRjYXJkIG9yaWdpbixcXG4jIGFuZCB0aGUgQVBJIGNyZWF0ZSBlbmZvcmNlcyBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItY29ycy1jcmVkZW50aWFscy13aWxkY2FyZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnMuJWRcXFwiLCBbby5pbmRleF0pLFxcblxcdFxcXCJDb3JzQ29uZmlndXJhdGlvbiBzZXRzIEFsbG93Q3JlZGVudGlhbHMgd2l0aCBhICcqJyBvcmlnaW47IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJhbGxvdy1jcmVkZW50aWFscyBpcyBub3Qgc3VwcG9ydGVkIGlmICdhbGxvdy1vcmlnaW4nIGlzICpcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkxpc3QgZXhwbGljaXQgb3JpZ2lucywgb3IgZHJvcCBBbGxvd0NyZWRlbnRpYWxzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWNvcnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29yc0NvbmZpZ3VyYXRpb24uQWxsb3dDcmVkZW50aWFsc1xcXCIpKSA9PSB0cnVlXFxuXFx0c29tZSBvIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnNcXFwiKVxcblxcdG8udmFsdWUgPT0gXFxcIipcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHRha2UgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSAyLjAgZXZlbnQgZm9ybWF0IGlzIExhbWJkYS1vbmx5OyBIVFRQX1BST1hZIGJhY2tlbmRzIG11c3Qgc3RheSBvblxcbiMgMS4wLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgc2hhcGUgKEFwaSBzaWJsaW5nIHByb3ZhYmx5IEhUVFApLlxcbl9wZl9hZ3YyaHBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLFxcblxcdFxcXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHN1cHBvcnQgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wOyB0aGUgaW50ZWdyYXRpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXlsb2FkRm9ybWF0VmVyc2lvbiAyLjAgaXMgbm90IHN1cHBvcnRlZCBmb3IgaW50ZWdyYXRpb24gb2YgdHlwZSBIVFRQX1BST1hZXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUGF5bG9hZEZvcm1hdFZlcnNpb24gdG8gMS4wIChvciBvbWl0IGl0KSwgb3Igc3dpdGNoIHRvIGFuIEFXU19QUk9YWSBpbnRlZ3JhdGlvbiBmb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkhUVFBfUFJPWFlcXFwiXFxuXFx0X3BmX2FndjJocHBfaHR0cF9hcGkobmFtZSlcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIikgPT0gXFxcIjIuMFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJIHJvdXRlIGtleXMgYXJlIFxcXCJNRVRIT0QgL3BhdGhcXFwiIG9yICRkZWZhdWx0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCByb3V0ZSBrZXlzIGFyZSBmcmVlLWZvcm0sIHNvIHRoaXMgb25seSBqdWRnZXMgcm91dGVzIHdob3NlIEFwaVxcbiMgc2libGluZyBpcyBwcm92YWJseSBIVFRQLiBUUkFDRSBpcyBkZXBsb3ktdmVyaWZpZWQgYXMgcmVqZWN0ZWQ7IHBhdGhzIHdpdGhcXG4jIHNwYWNlcyBhcmUgbGVmdCBhbG9uZSAodW5tZWFzdXJlZCkuXFxuX3BmX2FndjJya19tZXRob2RzIDo9IHtcXFwiR0VUXFxcIiwgXFxcIlBPU1RcXFwiLCBcXFwiUFVUXFxcIiwgXFxcIlBBVENIXFxcIiwgXFxcIkRFTEVURVxcXCIsIFxcXCJIRUFEXFxcIiwgXFxcIk9QVElPTlNcXFwiLCBcXFwiQU5ZXFxcIn1cXG5cXG5fcGZfYWd2MnJrX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbl9wZl9hZ3Yycmtfb2socmspIGlmIHJrID09IFxcXCIkZGVmYXVsdFxcXCJcXG5cXG5fcGZfYWd2MnJrX29rKHJrKSBpZiB7XFxuXFx0cGFydHMgOj0gc3BsaXQocmssIFxcXCIgXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gMlxcblxcdHBhcnRzWzBdIGluIF9wZl9hZ3YycmtfbWV0aG9kc1xcblxcdHN0YXJ0c3dpdGgocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZUtleVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUm91dGVLZXkgJyVzJyBpcyBtYWxmb3JtZWQgZm9yIGFuIEhUVFAgQVBJOyB0aGUgcm91dGUgY3JlYXRlIGZhaWxzIHdpdGggJ1RoZSBwcm92aWRlZCByb3V0ZSBrZXkgaXMgbm90IGZvcm1hdHRlZCBwcm9wZXJseSBmb3IgSFRUUCBwcm90b2NvbC4gRm9ybWF0IHNob3VsZCBiZSBcXFxcXFxcIltIVFRQIE1FVEhPRF0gL1tSRVNPVVJDRSBQQVRIXVxcXFxcXFwiIG9yIFxcXFxcXFwiJGRlZmF1bHRcXFxcXFxcIidcXFwiLCBbcmtdKSxcXG5cXHRcXFwiVXNlIFxcXFxcXFwiTUVUSE9EIC9wYXRoXFxcXFxcXCIgd2l0aCBNRVRIT0Qgb25lIG9mIEdFVCBQT1NUIFBVVCBQQVRDSCBERUxFVEUgSEVBRCBPUFRJT05TIEFOWSwgb3IgJGRlZmF1bHRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1yb3V0ZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVxcXCIpXFxuXFx0X3BmX2FndjJya19odHRwX2FwaShuYW1lKVxcblxcdHJrIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVLZXlcXFwiKVxcblxcdGlzX3N0cmluZyhyaylcXG5cXHRub3QgX3BmX2FndjJya19vayhyaylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUtc2VsZWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJcyBhY2NlcHQgb25seSB0aGUgbWV0aG9kLXBhdGggcm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggc3BlbGxpbmdzIGRlcGxveS12ZXJpZmllZCBhcyBhY2NlcHRlZDogdGhlIGRvY3VtZW50ZWRcXG4jIFxcXCIkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aFxcXCIgYW5kIHRoZSBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIlxcbiMgZm9ybSB0aGUgc2VydmljZSBlcnJvciBpdHNlbGYgcHJpbnRzIChiZW5jaCB2MDJiKS5cXG5fcGZfYWd2Mmhyc19hbGxvd2VkIDo9IHtcXFwiJHJlcXVlc3QubWV0aG9kICRyZXF1ZXN0LnBhdGhcXFwiLCBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1zZWxlY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSFRUUCBBUEkgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZDsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCAnUm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb24gaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gXFxcXFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFxcXFxcIidcXFwiLCBbcnNlXSksXFxuXFx0XFxcIlVzZSAkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aCwgb3Igb21pdCB0aGUgcHJvcGVydHkgKEhUVFAgQVBJcyBkZWZhdWx0IHRvIGl0KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxuXFx0cnNlIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocnNlKVxcblxcdG5vdCByc2UgaW4gX3BmX2FndjJocnNfYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpXVCBhdXRob3JpemVycyBuZWVkIEp3dENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIEpXVCBhdXRob3JpemVyIGlzIG5vdGhpbmcgYnV0IGl0cyBpc3N1ZXIvYXVkaWVuY2UgY29uZmlnLCBzbyB0aGVcXG4jIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3YyamFjX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJKd3RDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Kd3RDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSldUIGF1dGhvcml6ZXIgaGFzIG5vIEp3dENvbmZpZ3VyYXRpb247IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSnd0Q29uZmlndXJhdGlvbiBtdXN0IG5vdCBiZSBudWxsIGZvciBKV1QgQXV0aG9yaXplclxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEp3dENvbmZpZ3VyYXRpb24gd2l0aCBJc3N1ZXIgYW5kIEF1ZGllbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIkpXVFxcXCJcXG5cXHRfcGZfYWd2MmphY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1yZXF1ZXN0LWF1dGhvcml6ZXItcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJFUVVFU1QgYXV0aG9yaXplcnMgb24gSFRUUCBBUElzIG5lZWQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVxdWlyZWQgb24gSFRUUCBBUElzIG9ubHkgLSBXZWJTb2NrZXQgUkVRVUVTVCBhdXRob3JpemVycyBtdXN0IE5PVCBzZXRcXG4jIGl0LCBzbyB0aGUgcnVsZSBmaXJlcyBzb2xlbHkgd2hlbiB0aGUgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUC5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJyYXBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxuX3BmX2FndjJyYXBfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLXJlcXVlc3QtYXV0aG9yaXplci1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0XFxcIlJFUVVFU1QgYXV0aG9yaXplciBvbiBhbiBIVFRQIEFQSSBoYXMgbm8gQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvbiBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgUkVRVUVTVCBhdXRob3JpemVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uIHRvIDEuMCBvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiUkVRVUVTVFxcXCJcXG5cXHRfcGZfYWd2MnJhcF9odHRwX2FwaShuYW1lKVxcblxcdF9wZl9hZ3YycmFwX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLXdlYnNvY2tldC1yb3V0ZS1zZWxlY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2ViU29ja2V0IEFQSXMgbmVlZCBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCBBUElzIHJvdXRlIGJ5IGV2YWx1YXRpbmcgdGhpcyBleHByZXNzaW9uIGFnYWluc3QgZWFjaCBtZXNzYWdlLFxcbiMgc28gdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3Yyd3JzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi13ZWJzb2NrZXQtcm91dGUtc2VsZWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLFxcblxcdFxcXCJXZWJTb2NrZXQgQVBJIGhhcyBubyBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb247IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbiwgZS5nLiAkcmVxdWVzdC5ib2R5LmFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIldFQlNPQ0tFVFxcXCJcXG5cXHRfcGZfYWd2Mndyc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWNvb2xkb3duLW5vbi1uZWdhdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvb2xkb3duIGNhbm5vdCBiZSBuZWdhdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ29vbGRvd24gaXMgYSBzdHJpbmcgaW4gdGhlIHNjaGVtYTsgb25seSB0aGUgc2VydmljZSBrbm93cyBpdCBpcyBhXFxuIyBub24tbmVnYXRpdmUgaW50ZWdlci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1jb29sZG93bi1ub24tbmVnYXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvb2xkb3duXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb29sZG93biAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxcXFxcXFwiXFxcIiwgW2NdKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29vbGRvd25cXFwiKSlcXG5cXHRjIDwgMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1kZXNpcmVkLWNhcGFjaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVzaXJlZENhcGFjaXR5IG11c3Qgc2l0IGJldHdlZW4gTWluU2l6ZSBhbmQgTWF4U2l6ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNpemVzIGFyZSBzdHJpbmctdHlwZWQgaW4gdGhlIHNjaGVtYTsgdGhlIGJldHdlZW4tcmVsYXRpb25zaGlwIGlzXFxuIyBhIHRocmVlLXdheSBjcm9zcy1wcm9wZXJ0eSBjaGVjay4gVGhlIG1pbj5tYXggcGFpciBpdHNlbGYgaXMgZW5naW5lXFxuIyB0ZXJyaXRvcnkgKEUzNzA2KSBhbmQgbm90IHJlcGVhdGVkIGhlcmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctZGVzaXJlZC1jYXBhY2l0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZXNpcmVkQ2FwYWNpdHkgJXYgaXMgb3V0c2lkZSBbJXYsICV2XTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVzaXJlZCBjYXBhY2l0eToldiBtdXN0IGJlIGJldHdlZW4gdGhlIHNwZWNpZmllZCBtaW4gc2l6ZToldiBhbmQgbWF4IHNpemU6JXZcXFxcXFxcIlxcXCIsIFtkYywgbW4sIG14LCBkYywgbW4sIG14XSksXFxuXFx0XFxcIktlZXAgTWluU2l6ZSA8PSBEZXNpcmVkQ2FwYWNpdHkgPD0gTWF4U2l6ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGRjIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2lyZWRDYXBhY2l0eVxcXCIpKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1pblNpemVcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhTaXplXFxcIikpXFxuXFx0bW4gPD0gbXhcXG5cXHRfcGZfYXNnZGNyX291dChkYywgbW4sIG14KVxcbn1cXG5cXG5fcGZfYXNnZGNyX291dChkYywgbW4sIF8pIGlmIGRjIDwgbW5cXG5cXG5fcGZfYXNnZGNyX291dChkYywgXywgbXgpIGlmIGRjID4gbXhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCBjYW5ub3QgYmUgbmVnYXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgaXQgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBubyBmbG9vcjsgemVybyBpcyB0aGVcXG4jIHNlcnZpY2UgZGVmYXVsdCwgc28gb25seSBuZWdhdGl2ZXMgYXJlIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctaGVhbHRoLWNoZWNrLWdyYWNlLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiR3JhY2UgcGVyaW9kIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxcXFxcXFwiXFxcIiwgW2ddKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGcgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIpKVxcblxcdGcgPCAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLW9uZGVtYW5kLXBlcmNlbnRhZ2UtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgdG9wcyBvdXQgYXQgMTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHBlcmNlbnRhZ2Ugc3BsaXQgY2Fubm90IGV4Y2VlZCAxMDA7IHRoZSBzY2hlbWEgaGFzIG5vIG1heGltdW0uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctb25kZW1hbmQtcGVyY2VudGFnZS1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1peGVkSW5zdGFuY2VzUG9saWN5Lkluc3RhbmNlc0Rpc3RyaWJ1dGlvbi5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgJXYgaXMgb3ZlciAxMDA7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIGEgcGVyY2VudGFnZSBiZXR3ZWVuIDAgYW5kIDEwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC1pbnN0YW5jZXNkaXN0cmlidXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kuSW5zdGFuY2VzRGlzdHJpYnV0aW9uLk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5XFxcIikpXFxuXFx0cCA+IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy10YXJnZXQtdmFsdWUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgdHJhY2tpbmcgbmVlZHMgYSBwb3NpdGl2ZSBUYXJnZXRWYWx1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZmxvb3IgaXMgZWZmZWN0aXZlbHkgXFxcInBvc2l0aXZlXFxcIiAoOC41ZS0xMik7IHplcm8gYW5kXFxuIyBuZWdhdGl2ZXMgYXJlIHJlamVjdGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLXRhcmdldC12YWx1ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLlRhcmdldFZhbHVlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYXJnZXRWYWx1ZSAldiBpcyBub3QgcG9zaXRpdmU7IHRoZSBwb2xpY3kgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJUYXJnZXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDguNTE1OTJFLTEyIGFuZCAxLjE3NDI3MUUxN1xcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIGEgcG9zaXRpdmUgdGFyZ2V0IHZhbHVlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctc2NhbGluZ3BvbGljeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVxcXCIpXFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRUcmFja2luZ0NvbmZpZ3VyYXRpb24uVGFyZ2V0VmFsdWVcXFwiKSlcXG5cXHR2IDw9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGdyb3VwIG5lZWRzIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBvciBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQbGFjZW1lbnQgbXVzdCBjb21lIGZyb20gc29tZXdoZXJlLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXNnenNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZQQ1pvbmVJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiTmVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgbm9yIFZQQ1pvbmVJZGVudGlmaWVyIGlzIHNldDsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiWW91IG11c3Qgc3BlY2lmeSAxIG9mIGVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgb3IgU3VibmV0c1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZQQ1pvbmVJZGVudGlmaWVyIHdpdGggdGhlIHRhcmdldCBzdWJuZXRzIChvciBBdmFpbGFiaWxpdHlab25lcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiQXZhaWxhYmlsaXR5Wm9uZXNcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJBdmFpbGFiaWxpdHlab25lSWRzXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiVlBDWm9uZUlkZW50aWZpZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2F0ZXdheXMgd2l0aCBBdXRob3JpemVyVHlwZSBDVVNUT01fSldUIHJlcXVpcmUgQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9nd2p3dF9oYXNfY29uZmlnKG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uXFxcIikpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hZ2VudGNvcmUtZ2F0ZXdheS1qd3QtYXV0aG9yaXplclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBdXRob3JpemVyVHlwZSBpcyBDVVNUT01fSldUIGJ1dCBBdXRob3JpemVyQ29uZmlndXJhdGlvbiBpcyBtaXNzaW5nOyB0aGUgQ3JlYXRlR2F0ZXdheSBBUEkgcmVxdWlyZXMgaXQgYW5kIHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggYSBWYWxpZGF0aW9uRXhjZXB0aW9uXFxcIixcXG5cXHRcXFwiQWRkIEF1dGhvcml6ZXJDb25maWd1cmF0aW9uLkN1c3RvbUpXVEF1dGhvcml6ZXIgKGRpc2NvdmVyeVVybCBhbmQgYWxsb3dlZEF1ZGllbmNlL2FsbG93ZWRDbGllbnRzKSwgb3Igc3dpdGNoIEF1dGhvcml6ZXJUeXBlIHRvIEFXU19JQU1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVHYXRld2F5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiQ1VTVE9NX0pXVFxcXCJcXG5cXHRub3QgX3BmX2d3and0X2hhc19jb25maWcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hZ2VudGNvcmUtcnVudGltZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWdlbnRDb3JlIFJ1bnRpbWUgbmFtZXMgbXVzdCBtYXRjaCBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSAobm8gaHlwaGVucylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIOOCueOCreODvOODnuOBryBBZ2VudFJ1bnRpbWVOYW1lIOOBruODkeOCv+ODvOODs+OCkuaMgeOBn+OBquOBhO+8iOOCqOODs+OCuOODs+e0oOmAmuOCiuOAgVxcbiMgMjAyNi0wOS0wMSDjgasgMS43LjAtYmV0YSDjgafnorroqo3vvInjgYzjgIFDcmVhdGVBZ2VudFJ1bnRpbWUgQVBJIOOBr1xcbiMgW2EtekEtWl1bYS16QS1aMC05X117MCw0N30g44KS5by35Yi244GZ44KL44CC44OP44Kk44OV44Oz5YWl44KK44GuIENESyDpoqjlkb3lkI3jgYzlrprnlarjga7mrbvlm6DjgIJcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFnZW50UnVudGltZU5hbWUgJyVzJyBpcyBpbnZhbGlkOiBpdCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcyAobWF4IDQ4IGNoYXJhY3RlcnMsIGh5cGhlbnMgYXJlIG5vdCBhbGxvd2VkKTsgQ3JlYXRlQWdlbnRSdW50aW1lIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGFuIHVuZGVyc2NvcmUtc2VwYXJhdGVkIG5hbWUgc3VjaCBhcyAnbXlfYWdlbnRfcnVudGltZSdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVBZ2VudFJ1bnRpbWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlcyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCByZXF1aXJlcyB0aGUgQUNNIGNlcnRpZmljYXRlIHRvIGJlIGluIHVzLWVhc3QtMSwgYnV0IHRoZSBjZXJ0aWZpY2F0ZSBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRcXFwiSXNzdWUgb3IgaW1wb3J0IHRoZSBjZXJ0aWZpY2F0ZSBpbiB1cy1lYXN0LTEgKGUuZy4gYSBkZWRpY2F0ZWQgdXMtZWFzdC0xIHN0YWNrKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NuYW1lcy1hbmQtaHR0cHMtcmVxdWlyZW1lbnRzLmh0bWwjaHR0cHMtcmVxdWlyZW1lbnRzLWNlcnRpZmljYXRlLWlzc3VlclxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzJdID09IFxcXCJhY21cXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hbGlhc2VzLXJlcXVpcmUtY3VzdG9tLWNlcnRpZmljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRpc3RyaWJ1dGlvbiB3aXRoIEFsaWFzZXMgY2Fubm90IHVzZSB0aGUgQ2xvdWRGcm9udCBkZWZhdWx0IGNlcnRpZmljYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9hbGlhc2NlcnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLXZpZXdlcmNlcnRpZmljYXRlLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9maXggOj0gXFxcIkF0dGFjaCBhbiBBQ00gY2VydGlmaWNhdGUgKEFjbUNlcnRpZmljYXRlQXJuLCB1cy1lYXN0LTEpIG9yIGFuIElBTSBjZXJ0aWZpY2F0ZSwgdG9nZXRoZXIgd2l0aCBTc2xTdXBwb3J0TWV0aG9kIGFuZCBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uXFxcIlxcblxcbl9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgOj0gY291bnQoWzEgfFxcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkFsaWFzZXNcXFwiKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0XFxcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcXFwiLFxcblxcdF9wZl9jZl9hbGlhc2NlcnRfZml4LCBfcGZfY2ZfYWxpYXNjZXJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdF9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgPiAwXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQ2xvdWRGcm9udERlZmF1bHRDZXJ0aWZpY2F0ZVxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWNhY2hlZC1tZXRob2RzLXN1YnNldFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGVkTWV0aG9kcyBtdXN0IGJlIGEgc3Vic2V0IG9mIEFsbG93ZWRNZXRob2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9tZXRob2RzX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1jYWNoZWJlaGF2aW9yLmh0bWxcXFwiXFxuXFxuX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIiwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSksIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG4jIENsb3VkRnJvbnQgZGVmYXVsdHMgQWxsb3dlZE1ldGhvZHMgdG8gR0VUL0hFQUQgd2hlbiB0aGUgcHJvcGVydHkgaXMgb21pdHRlZCxcXG4jIHNvIGFuIG9taXR0ZWQgQWxsb3dlZE1ldGhvZHMgc3RpbGwgY29uc3RyYWlucyB3aGF0IG1heSBiZSBjYWNoZWQuXFxuX3BmX2NmX21ldGhvZHNfYWxsb3dlZChiKSA6PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJBbGxvd2VkTWV0aG9kc1xcXCIsIFtcXFwiR0VUXFxcIiwgXFxcIkhFQURcXFwiXSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DYWNoZWRNZXRob2RzXFxcIiwgW2IucGF0aF0pLFxcblxcdHNwcmludGYoXFxcIkNhY2hlZE1ldGhvZHMgY29udGFpbnMgJXMsIHdoaWNoIGlzIG5vdCBpbiBBbGxvd2VkTWV0aG9kcyAldlxcXCIsIFttZXRob2QsIGFsbG93ZWRdKSxcXG5cXHRcXFwiRXZlcnkgbWV0aG9kIGluIENhY2hlZE1ldGhvZHMgbXVzdCBhbHNvIGFwcGVhciBpbiBBbGxvd2VkTWV0aG9kc1xcXCIsXFxuXFx0X3BmX2NmX21ldGhvZHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9tZXRob2RzX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdGNhY2hlZCA6PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJDYWNoZWRNZXRob2RzXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShjYWNoZWQpXFxuXFx0YWxsb3dlZCA6PSBfcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpXFxuXFx0aXNfYXJyYXkoYWxsb3dlZClcXG5cXHRzb21lIG1ldGhvZCBpbiBjYWNoZWRcXG5cXHRub3QgbWV0aG9kIGluIGFsbG93ZWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhQEVkZ2UgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIGRpc3RyaWJ1dGlvbiBtdXN0IGJlIGluIHVzLWVhc3QtMVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl9maXggOj0gXFxcIkNyZWF0ZSB0aGUgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gaW4gdXMtZWFzdC0xIChjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24gZG9lcyB0aGlzIGZvciB5b3UpIGFuZCBhc3NvY2lhdGUgdGhhdCB2ZXJzaW9uJ3MgQVJOXFxcIlxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2xhbWJkYS1hdC1lZGdlLWZ1bmN0aW9uLXJlc3RyaWN0aW9ucy5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbnMuJWQuTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBbYi5wYXRoLCBhLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTGFtYmRhQEVkZ2UgZnVuY3Rpb25zIG11c3QgbGl2ZSBpbiB1cy1lYXN0LTEsIGJ1dCB0aGlzIGZ1bmN0aW9uIGlzIGluICVzXFxcIiwgW3JlZ2lvbl0pLFxcblxcdF9wZl9jZl9lZGdlcmVnaW9uX2ZpeCwgX3BmX2NmX2VkZ2VyZWdpb25fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9lZGdlcmVnaW9uX2JlaGF2aW9ycyhuYW1lKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiJXMuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbnNcXFwiLCBbYi5wYXRoXSkpXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA3XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHJlZ2lvbiA6PSBwYXJ0c1szXVxcblxcdHJlZ2lvbiAhPSBcXFwiXFxcIlxcblxcdHJlZ2lvbiAhPSBcXFwidXMtZWFzdC0xXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhQEVkZ2UgYXNzb2NpYXRpb25zIG11c3QgcmVmZXJlbmNlIGEgdmVyc2lvbiBBUk4sIG5vdCBhbiBhbGlhcyBvciAkTEFURVNUXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdldmVyX2ZpeCA6PSBcXFwiQXNzb2NpYXRlIGEgdmVyc2lvbiBBUk4gKGluIHRoZSBDREssIGZuLmN1cnJlbnRWZXJzaW9uLmVkZ2VBcm4pIGluc3RlYWQgb2YgdGhlIHVucXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYW4gYWxpYXMsIG9yICRMQVRFU1RcXFwiXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWxhbWJkYWZ1bmN0aW9uYXNzb2NpYXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl9iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwifSB8XFxuXFx0XFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSl9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgTGFtYmRhIEFSTnMgc3BsaXQgaW50byA3IHNlZ21lbnRzIHdoZW4gdW5xdWFsaWZpZWRcXG4jIChhcm46cGFydGl0aW9uOmxhbWJkYTpyZWdpb246YWNjb3VudDpmdW5jdGlvbjpuYW1lKSBhbmQgOCB3aGVuIGEgdmVyc2lvbiBvclxcbiMgYWxpYXMgcXVhbGlmaWVyIGlzIGFwcGVuZGVkLiBPbmx5IGFuIGFsbC1kaWdpdCBxdWFsaWZpZXIgaXMgYSB2ZXJzaW9uLlxcbl9wZl9jZl9lZGdldmVyX2FybnMobmFtZSkgOj0gW3tcXFwicGF0aFxcXCI6IHBhdGgsIFxcXCJhcm5cXFwiOiBhcm4sIFxcXCJwYXJ0c1xcXCI6IHBhcnRzfSB8XFxuXFx0c29tZSBiIGluIF9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiJXMuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbnNcXFwiLCBbYi5wYXRoXSkpXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImxhbWJkYVxcXCJcXG5cXHRwYXJ0c1s1XSA9PSBcXFwiZnVuY3Rpb25cXFwiXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKVxcbl1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGl0LnBhdGgsXFxuXFx0XFxcIkxhbWJkYUBFZGdlIHJlcXVpcmVzIGEgdmVyc2lvbi1xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBidXQgdGhpcyBBUk4gaGFzIG5vIHF1YWxpZmllclxcXCIsXFxuXFx0X3BmX2NmX2VkZ2V2ZXJfZml4LCBfcGZfY2ZfZWRnZXZlcl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGl0IGluIF9wZl9jZl9lZGdldmVyX2FybnMobmFtZSlcXG5cXHRjb3VudChpdC5wYXJ0cykgPT0gN1xcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGl0LnBhdGgsXFxuXFx0c3ByaW50ZihcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCAnJXMnIGlzIGFuIGFsaWFzIG9yICRMQVRFU1RcXFwiLCBbcXVhbGlmaWVyXSksXFxuXFx0X3BmX2NmX2VkZ2V2ZXJfZml4LCBfcGZfY2ZfZWRnZXZlcl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGl0IGluIF9wZl9jZl9lZGdldmVyX2FybnMobmFtZSlcXG5cXHRjb3VudChpdC5wYXJ0cykgPT0gOFxcblxcdHF1YWxpZmllciA6PSBpdC5wYXJ0c1s3XVxcblxcdG5vdCByZWdleC5tYXRjaChcXFwiXlswLTldKyRcXFwiLCBxdWFsaWZpZXIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1vcmlnaW4tZ3JvdXAtbWVtYmVyLW9yaWdpblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT3JpZ2luIGdyb3VwIG1lbWJlcnMgbXVzdCByZWZlcmVuY2UgYW4gb3JpZ2luIGRlY2xhcmVkIGluIHRoZSBkaXN0cmlidXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX29nbWVtYmVyX2lkcyhuYW1lKSA6PSB7aWQgfFxcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5zXFxcIilcXG5cXHRpZCA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiSWRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhpZClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXMuJWQuTWVtYmVyc1xcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiT3JpZ2luIGdyb3VwIG1lbWJlciAnJXMnIGRvZXMgbm90IG1hdGNoIGFueSBvcmlnaW4gSWQgaW4gdGhlIGRpc3RyaWJ1dGlvblxcXCIsIFtvaWRdKSxcXG5cXHRcXFwiUG9pbnQgZXZlcnkgb3JpZ2luIGdyb3VwIG1lbWJlciBhdCB0aGUgSWQgb2YgYW4gb3JpZ2luIGRlY2xhcmVkIGluIE9yaWdpbnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLW9yaWdpbmdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luR3JvdXBzLkl0ZW1zXFxcIilcXG5cXHRtZW1iZXJzIDo9IG9iamVjdC5nZXQob2JqZWN0LmdldChnLnZhbHVlLCBcXFwiTWVtYmVyc1xcXCIsIHt9KSwgXFxcIkl0ZW1zXFxcIiwgW10pXFxuXFx0c29tZSBtIGluIG1lbWJlcnNcXG5cXHRvaWQgOj0gb2JqZWN0LmdldChtLCBcXFwiT3JpZ2luSWRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhvaWQpXFxuXFx0bm90IG9pZCBpbiBfcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC10dGwtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNhY2hlIGJlaGF2aW9yIFRUTHMgbXVzdCBzYXRpc2Z5IE1pblRUTCA8PSBEZWZhdWx0VFRMIDw9IE1heFRUTFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfdHRsX2ZpeCA6PSBcXFwiT3JkZXIgdGhlIFRUTHMgYXMgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXFxcIlxcblxcbl9wZl9jZl90dGxfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC10dGwtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBiLnBhdGgsXFxuXFx0c3ByaW50ZihcXFwiTWluVFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbbW4sIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRtbiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWluVFRMXFxcIiwgbnVsbCkpXFxuXFx0bXggOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1heFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gbXhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBEZWZhdWx0VFRMICgldilcXFwiLCBbbW4sIGRmXSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRtbiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWluVFRMXFxcIiwgbnVsbCkpXFxuXFx0ZGYgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkRlZmF1bHRUVExcXFwiLCBudWxsKSlcXG5cXHRtbiA+IGRmXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC10dGwtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBiLnBhdGgsXFxuXFx0c3ByaW50ZihcXFwiRGVmYXVsdFRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heFRUTCAoJXYpXFxcIiwgW2RmLCBteF0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0ZGYgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkRlZmF1bHRUVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0ZGYgPiBteFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtd2FmdjItd2ViYWNsLXNjb3BlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFdBRnYyIHdlYiBBQ0wgYXR0YWNoZWQgdG8gQ2xvdWRGcm9udCBtdXN0IGJlIGdsb2JhbGx5IHNjb3BlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgV0FGdjIgQVJOIGNhcnJpZXMgaXRzIHNjb3BlIGluIHRoZSByZXNvdXJjZSBzZWdtZW50OlxcbiMgICBhcm46YXdzOndhZnYyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Z2xvYmFsL3dlYmFjbC9uYW1lL2lkICAgIChDTE9VREZST05UKVxcbiMgICBhcm46YXdzOndhZnYyOmFwLW5vcnRoZWFzdC0xOjEyMzQ1Njc4OTAxMjpyZWdpb25hbC93ZWJhY2wvLi4uIChSRUdJT05BTClcXG4jIENsb3VkRnJvbnQgYWNjZXB0cyBvbmx5IHRoZSBnbG9iYWwgZm9ybS4gQ2hlY2tpbmcgdGhlIHJlZ2lvbiBhbG9uZSB3b3VsZCBtaXNzXFxuIyBhIFJFR0lPTkFMIHdlYiBBQ0wgdGhhdCBoYXBwZW5zIHRvIGhhdmUgYmVlbiBjcmVhdGVkIGluIHVzLWVhc3QtMSwgd2hpY2ggaXNcXG4jIHRoZSBlYXN5IG1pc3Rha2UgdG8gbWFrZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtd2FmdjItd2ViYWNsLXNjb3BlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuV2ViQUNMSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNsb3VkRnJvbnQgb25seSBhY2NlcHRzIGEgZ2xvYmFsbHkgc2NvcGVkIHdlYiBBQ0wsIGJ1dCB0aGlzIEFSTiBpcyBzY29wZWQgJyVzJ1xcXCIsIFtzY29wZV0pLFxcblxcdFxcXCJDcmVhdGUgdGhlIHdlYiBBQ0wgd2l0aCBzY29wZSBDTE9VREZST05UIGluIHVzLWVhc3QtMSAod2FmdjIuQ2ZuV2ViQUNMIHdpdGggc2NvcGU6ICdDTE9VREZST05UJykgYW5kIHJlZmVyZW5jZSB0aGF0IEFSTlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXdhZnYyLXdlYmFjbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcIndhZnYyXFxcIlxcblxcdHNlZ21lbnRzIDo9IHNwbGl0KHBhcnRzWzVdLCBcXFwiL1xcXCIpXFxuXFx0c2NvcGUgOj0gc2VnbWVudHNbMF1cXG5cXHRzY29wZSAhPSBcXFwiZ2xvYmFsXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tcGVyaW9kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgUGVyaW9kIGFzIGEgYmFyZSBpbnRlZ2VyOyB0aGUgdmFsaWQgdmFsdWVzIGFyZVxcbiMgb25seSBpbiB0aGUgc2VydmljZSAoXFxcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFxcXCIpLlxcbiMgVG9wLWxldmVsIFBlcmlvZCBvbmx5IOKAlCB0aGUgc2FtZSBjb25zdHJhaW50IGluc2lkZSBNZXRyaWNTdGF0IHdhcyBub3RcXG4jIG1lYXN1cmVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS1wZXJpb2RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGVyaW9kICV2IGlzIGludmFsaWQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFxcXFxcIlxcXCIsIFtwXSksXFxuXFx0XFxcIlVzZSAxMCwgMjAsIDMwLCBvciBhIG11bHRpcGxlIG9mIDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRwIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBlcmlvZFxcXCIpKVxcblxcdG5vdCBwIGluIHsxMCwgMjAsIDMwfVxcblxcdHAgJSA2MCAhPSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN0YW5kYXJkIG9wZXJhdG9ycyBuZWVkIFRocmVzaG9sZCwgcmFuZ2Ugb3BlcmF0b3JzIG5lZWQgVGhyZXNob2xkTWV0cmljSWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY3dhdGhfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiXFxuXFxuIyBUaGUgdHdvIHJhbmdlIG9wZXJhdG9ycyBhbmNob3IgdG8gYW4gYW5vbWFseS1kZXRlY3Rpb24gYmFuZCB2aWFcXG4jIFRocmVzaG9sZE1ldHJpY0lkOyBldmVyeSBvdGhlciBvcGVyYXRvciBuZWVkcyBhIHN0YXRpYyBUaHJlc2hvbGQuIEFic2VuY2VcXG4jIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jd2F0aF9yYW5nZV9vcHMgOj0ge1xcXCJMZXNzVGhhbkxvd2VyT3JHcmVhdGVyVGhhblVwcGVyVGhyZXNob2xkXFxcIiwgXFxcIkxlc3NUaGFuTG93ZXJUaHJlc2hvbGRcXFwiLCBcXFwiR3JlYXRlclRoYW5VcHBlclRocmVzaG9sZFxcXCJ9XFxuXFxuX3BmX2N3YXRoX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb21wYXJpc29uT3BlcmF0b3IgJyVzJyBuZWVkcyBhIHN0YXRpYyBUaHJlc2hvbGQgYnV0IG5vbmUgaXMgc2V0OyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiUHV0TWV0cmljQWxhcm0gcmVxdWVzdCBzaG91bGQgaGF2ZSB2YWxpZCBUaHJlc2hvbGQgcGFyYW1ldGVyXFxcXFxcXCJcXFwiLCBbb3BdKSxcXG5cXHRcXFwiU2V0IFRocmVzaG9sZCwgb3Igc3dpdGNoIHRvIGFuIGFub21hbHktZGV0ZWN0aW9uIG9wZXJhdG9yIHdpdGggVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdF9wZl9jd2F0aF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG9wIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcGFyaXNvbk9wZXJhdG9yXFxcIilcXG5cXHRpc19zdHJpbmcob3ApXFxuXFx0bm90IG9wIGluIF9wZl9jd2F0aF9yYW5nZV9vcHNcXG5cXHRfcGZfY3dhdGhfYWJzZW50KG5hbWUsIFxcXCJUaHJlc2hvbGRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRNZXRyaWNJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ29tcGFyaXNvbk9wZXJhdG9yICclcycgaXMgYSByYW5nZSBvcGVyYXRvciBidXQgVGhyZXNob2xkTWV0cmljSWQgaXMgbm90IHNldDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbXBhcmlzb25PcGVyYXRvcnMgZm9yIHJhbmdlcyByZXF1aXJlIFRocmVzaG9sZE1ldHJpY0lkIHRvIGJlIHNldFxcXFxcXFwiXFxcIiwgW29wXSksXFxuXFx0XFxcIlBvaW50IFRocmVzaG9sZE1ldHJpY0lkIGF0IHRoZSBBTk9NQUxZX0RFVEVDVElPTl9CQU5EIHF1ZXJ5IGlkLCBvciB1c2UgYSBzdGF0aWMtdGhyZXNob2xkIG9wZXJhdG9yXFxcIixcXG5cXHRfcGZfY3dhdGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRvcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXBhcmlzb25PcGVyYXRvclxcXCIpXFxuXFx0b3AgaW4gX3BmX2N3YXRoX3JhbmdlX29wc1xcblxcdF9wZl9jd2F0aF9hYnNlbnQobmFtZSwgXFxcIlRocmVzaG9sZE1ldHJpY0lkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWNvbXBvc2l0ZS1hbGFybS1ydWxlLXN5bnRheFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gQWxhcm1SdWxlIG11c3Qgc3RhcnQgd2l0aCBhIHZhbGlkIGV4cHJlc3Npb24gdG9rZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIG5hbWVzIHRoZSBvbmx5IHRva2VucyBhIHJ1bGUgZXhwcmVzc2lvbiBtYXkgc3RhcnQgd2l0aDsgdGhpc1xcbiMgY2hlY2tzIGp1c3QgdGhhdCBmaXJzdCB0b2tlbiDigJQgYSBmdWxsIGdyYW1tYXIgaXMgb3V0IG9mIHNjb3BlLiBGdW5jdGlvblxcbiMgdG9rZW5zIHRha2UgYW4gYXJndW1lbnQgbGlzdCwga2V5d29yZHMgc3RhbmQgYWxvbmUuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIihcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJOT1QgXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiTk9UKFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIkFUX0xFQVNUXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgdCA9PSBcXFwiVFJVRVxcXCJcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgdCA9PSBcXFwiRkFMU0VcXFwiXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIkFMQVJNKFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk9LKFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIklOU1VGRklDSUVOVF9EQVRBKFxcXCIpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWNvbXBvc2l0ZS1hbGFybS1ydWxlLXN5bnRheFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxhcm1SdWxlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGFybVJ1bGUgJyVzJyBkb2VzIG5vdCBzdGFydCB3aXRoIGEgdmFsaWQgdG9rZW47IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkVycm9yIGluIEFsYXJtUnVsZSBbVW5zdXBwb3J0ZWQgdG9rZW4gLi4uIG11c3QgYmU6ICcoJywgJ05PVCcsIEFUX0xFQVNULCBUUlVFIG9yIEZBTFNFLCBBTEFSTSwgT0ssIG9yIElOU1VGRklDSUVOVF9EQVRBXVxcXFxcXFwiXFxcIiwgW2V4cHJdKSxcXG5cXHRcXFwiU3RhcnQgdGhlIHJ1bGUgd2l0aCBBTEFSTSguLi4pLCBPSyguLi4pLCBJTlNVRkZJQ0lFTlRfREFUQSguLi4pLCBOT1QsIEFUX0xFQVNULCBUUlVFLCBGQUxTRSwgb3IgYSBwYXJlbnRoZXNpemVkIGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L21vbml0b3JpbmcvQ3JlYXRlX0NvbXBvc2l0ZV9BbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpDb21wb3NpdGVBbGFybVxcXCIpXFxuXFx0ZXhwciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsYXJtUnVsZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGV4cHIpXFxuXFx0dCA6PSB0cmltX3NwYWNlKGV4cHIpXFxuXFx0dCAhPSBcXFwiXFxcIlxcblxcdG5vdCBfcGZfY3djYXNfdmFsaWRfc3RhcnQodClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBub3QgZXhjZWVkIEV2YWx1YXRpb25QZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiLFxcblxcdHNwcmludGYoXFxcIkRhdGFwb2ludHNUb0FsYXJtICgldikgZXhjZWVkcyBFdmFsdWF0aW9uUGVyaW9kcyAoJXYpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRXZhbHVhdGlvblBlcmlvZHNcXFxcXFxcIlxcXCIsIFtkLCBldl0pLFxcblxcdFxcXCJMb3dlciBEYXRhcG9pbnRzVG9BbGFybSB0byBhdCBtb3N0IEV2YWx1YXRpb25QZXJpb2RzLCBvciByYWlzZSBFdmFsdWF0aW9uUGVyaW9kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdGQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiKSlcXG5cXHRldiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmFsdWF0aW9uUGVyaW9kc1xcXCIpKVxcblxcdGQgPiBldlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZXh0ZW5kZWQtc3RhdGlzdGljXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHBlcmNlbnRpbGUgc3RhdGlzdGljIGNhbm5vdCBleGNlZWQgcDEwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGVyY2VudGlsZSBzdGF0aXN0aWNzIHJ1biBwMC4wIHRvIHAxMDAuIE9ubHkgdGhlIHBOIGZvcm0gaXMgY2hlY2tlZDsgb3RoZXJcXG4jIGV4dGVuZGVkIGZvcm1zICh0bSwgd20sIHRjLCB0cywgLi4uKSBoYXZlIHRoZWlyIG93biBncmFtbWFycyBhbmQgd2VyZSBub3RcXG4jIG1lYXN1cmVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1leHRlbmRlZC1zdGF0aXN0aWNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFeHRlbmRlZFN0YXRpc3RpYyAnJXMnIGlzIGJleW9uZCBwMTAwOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIHZhbHVlICVzIGZvciBwYXJhbWV0ZXIgRXh0ZW5kZWRTdGF0aXN0aWMgaXMgbm90IHN1cHBvcnRlZC5cXFxcXFxcIlxcXCIsIFtzLCBzXSksXFxuXFx0XFxcIlVzZSBhIHBlcmNlbnRpbGUgYmV0d2VlbiBwMC4wIGFuZCBwMTAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L21vbml0b3JpbmcvY2xvdWR3YXRjaF9jb25jZXB0cy5odG1sI1BlcmNlbnRpbGVzXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIilcXG5cXHRpc19zdHJpbmcocylcXG5cXHRzdGFydHN3aXRoKHMsIFxcXCJwXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihzdWJzdHJpbmcocywgMSwgY291bnQocykgLSAxKSlcXG5cXHRuID4gMTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHByZXNzaW9uIGFuZCBNZXRyaWNTdGF0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUgcGVyIHF1ZXJ5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmUgcXVlcnkgZW50cnkgaXMgZWl0aGVyIGEgbWF0aCBleHByZXNzaW9uIG9yIGEgbWV0cmljIGZldGNoLCBuZXZlciBib3RoLlxcbiMgVGhlIHNwZWNpZnktbmVpdGhlciBzaGFwZSBmYWlscyB0b28sIGJ1dCB3aXRoIGFuIHVucmVsYXRlZCBlcnJvciAoXFxcIlBlcmlvZFxcbiMgbXVzdCBub3QgYmUgbnVsbFxcXCIsIGJlbmNoIHcwM2IpIOKAlCBzbyBvbmx5IHRoZSBib3RoLXNldCBkaXJlY3Rpb24gaXMgY2xhaW1lZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNzLiVkXFxcIiwgW3EuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJNZXRyaWMgcXVlcnkgJyVzJyBzZXRzIGJvdGggRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXJzIE1ldHJpY0RhdGFRdWVyeSBFeHByZXNzaW9uIGFuZCBNZXRyaWNTdGF0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIHlvdSBoYXZlIHNwZWNpZmllZCBib3RoLlxcXFxcXFwiXFxcIiwgW3FpZF0pLFxcblxcdFxcXCJLZWVwIHRoZSBFeHByZXNzaW9uIGFuZCBkcm9wIE1ldHJpY1N0YXQgKGZldGNoIHRoZSBpbnB1dHMgaW4gc2VwYXJhdGUgcXVlcmllcyksIG9yIHZpY2UgdmVyc2FcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3Vkd2F0Y2gtYWxhcm0tbWV0cmljZGF0YXF1ZXJ5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKVxcblxcdGlzX29iamVjdChxLnZhbHVlKVxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChxLnZhbHVlLCBcXFwiTWV0cmljU3RhdFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRxaWQgOj0gb2JqZWN0LmdldChxLnZhbHVlLCBcXFwiSWRcXFwiLCBcXFwiPHF1ZXJ5PlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhhY3RseSBvbmUgbWV0cmljIHF1ZXJ5IG11c3QgcmV0dXJuIGRhdGFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIGFsYXJtIG9uIGEgTWV0cmljcyBhcnJheSBuZWVkcyBleGFjdGx5IG9uZSBxdWVyeSByZXR1cm5pbmcgZGF0YS5cXG4jIFJldHVybkRhdGEgZGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIGFic2VudCAoYmVuY2ggdzA0YiksIGFuZCBleHBsaWNpdCBmYWxzZVxcbiMgZXZlcnl3aGVyZSBpcyByZWplY3RlZCB0b28gKHcwNGMpLiBBIHF1ZXJ5IHdob3NlIFJldHVybkRhdGEgaXMgYW5cXG4jIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgbWFrZXMgdGhlIGNvdW50IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9jd21xcl9jb3VudGFibGUocSkgaWYgb2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIGlzX2Jvb2xlYW4ob2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIG51bGwpKVxcblxcbl9wZl9jd21xcl9yZXR1cm5zKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCB0cnVlKSA9PSB0cnVlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1yZXR1cm5kYXRhXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCBvZiB0aGUgbWV0cmljIHF1ZXJpZXMgcmV0dXJuIGRhdGEgKFJldHVybkRhdGEgZGVmYXVsdHMgdG8gdHJ1ZSk7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJFeGFjdGx5IG9uZSBlbGVtZW50IG9mIHRoZSBtZXRyaWNzIGxpc3Qgc2hvdWxkIHJldHVybiBkYXRhLlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFJldHVybkRhdGE6IGZhbHNlIG9uIGV2ZXJ5IHF1ZXJ5IGV4Y2VwdCB0aGUgb25lIHRoZSBhbGFybSBzaG91bGQgd2F0Y2hcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3Vkd2F0Y2gtYWxhcm0tbWV0cmljZGF0YXF1ZXJ5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRpdGVtcyA6PSBbcSB8IHNvbWUgcSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBxIGluIGl0ZW1zIHtcXG5cXHRcXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRcXHRfcGZfY3dtcXJfY291bnRhYmxlKHEudmFsdWUpXFxuXFx0fVxcblxcdG4gOj0gY291bnQoW3EgfCBzb21lIHEgaW4gaXRlbXM7IF9wZl9jd21xcl9yZXR1cm5zKHEudmFsdWUpXSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWFsaWFzLXVzZXJuYW1lLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWxpYXNBdHRyaWJ1dGVzIGFuZCBVc2VybmFtZUF0dHJpYnV0ZXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgS2V5IHByZXNlbmNlIGlzIHRoZSB2aW9sYXRpb24gcmVnYXJkbGVzcyBvZiB2YWx1ZXMsIHNvIHRoaXMgY2hlY2tzIHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IGRpcmVjdGx5IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nYXVlX3NldChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWFsaWFzLXVzZXJuYW1lLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVXNlcm5hbWVBdHRyaWJ1dGVzXFxcIixcXG5cXHRcXFwiQm90aCBBbGlhc0F0dHJpYnV0ZXMgYW5kIFVzZXJuYW1lQXR0cmlidXRlcyBhcmUgc2V0OyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk9ubHkgb25lIG9mIHRoZSBhbGlhc0F0dHJpYnV0ZXMgb3IgdXNlcm5hbWVBdHRyaWJ1dGVzIGNhbiBiZSBzZXQgaW4gYSBVc2VyIHBvb2wuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJLZWVwIG9uZTogYWxpYXNlcyBmb3Igc2lnbi1pbiBhbHRlcm5hdGl2ZXMsIG9yIHVzZXJuYW1lIGF0dHJpYnV0ZXMgdG8gcmVwbGFjZSB1c2VybmFtZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRfcGZfY29nYXVlX3NldChuYW1lLCBcXFwiQWxpYXNBdHRyaWJ1dGVzXFxcIilcXG5cXHRfcGZfY29nYXVlX3NldChuYW1lLCBcXFwiVXNlcm5hbWVBdHRyaWJ1dGVzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImNsaWVudF9jcmVkZW50aWFscyBjYW5ub3QgY29tYmluZSB3aXRoIGNvZGUgb3IgaW1wbGljaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1hY2hpbmUtdG8tbWFjaGluZSBhbmQgdXNlci1mYWNpbmcgZ3JhbnRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgb24gb25lXFxuIyBjbGllbnQuXFxuX3BmX2NvZ2NjZV9mbG93cyhuYW1lKSA6PSB7Zi52YWx1ZSB8IHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tY2xpZW50LWNyZWRlbnRpYWxzLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGNvbWJpbmVzIGNsaWVudF9jcmVkZW50aWFscyB3aXRoICclcyc7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJjbGllbnRfY3JlZGVudGlhbHMgZmxvdyBjYW4gbm90IGJlIHNlbGVjdGVkIGFsb25nIHdpdGggY29kZSBmbG93IG9yIGltcGxpY2l0IGZsb3cuXFxcXFxcXCJcXFwiLCBbb3RoZXJdKSxcXG5cXHRcXFwiU3BsaXQgdGhlIGZsb3dzIGFjcm9zcyBzZXBhcmF0ZSB1c2VyIHBvb2wgY2xpZW50c1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGZsb3dzIDo9IF9wZl9jb2djY2VfZmxvd3MobmFtZSlcXG5cXHRcXFwiY2xpZW50X2NyZWRlbnRpYWxzXFxcIiBpbiBmbG93c1xcblxcdHNvbWUgb3RoZXIgaW4ge1xcXCJjb2RlXFxcIiwgXFxcImltcGxpY2l0XFxcIn1cXG5cXHRvdGhlciBpbiBmbG93c1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LWNyZWRlbnRpYWxzLXNlY3JldFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY2xpZW50X2NyZWRlbnRpYWxzIG5lZWRzIGEgY2xpZW50IHNlY3JldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWFjaGluZS10by1tYWNoaW5lIGF1dGggaXMgc2VjcmV0LWJhc2VkLiBHZW5lcmF0ZVNlY3JldCBkZWZhdWx0cyB0b1xcbiMgZmFsc2UsIHNvIGJvdGggdGhlIGxpdGVyYWwgZmFsc2UgYW5kIHRoZSBhYnNlbnQga2V5IGxlYXZlIHRoZSBjbGllbnRcXG4jIHNlY3JldGxlc3MuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlXFxuIyBBR0VOVFMubWQpLlxcbl9wZl9jb2djY3Nfbm9fc2VjcmV0KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiR2VuZXJhdGVTZWNyZXRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2djY3Nfbm9fc2VjcmV0KG5hbWUpIGlmIGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuR2VuZXJhdGVTZWNyZXRcXFwiKSkgPT0gZmFsc2VcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tY2xpZW50LWNyZWRlbnRpYWxzLXNlY3JldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR2VuZXJhdGVTZWNyZXRcXFwiLFxcblxcdFxcXCJjbGllbnRfY3JlZGVudGlhbHMgZmxvdyBvbiBhIGNsaWVudCB3aXRob3V0IGEgc2VjcmV0OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cgY2FuIG5vdCBiZSBzZWxlY3RlZCBpZiBjbGllbnQgZG9lcyBub3QgaGF2ZSBhIGNsaWVudCBzZWNyZXQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgR2VuZXJhdGVTZWNyZXQ6IHRydWUgb24gdGhpcyBjbGllbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIilcXG5cXHRmLnZhbHVlID09IFxcXCJjbGllbnRfY3JlZGVudGlhbHNcXFwiXFxuXFx0X3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWRvbWFpbi1yZXNlcnZlZC13b3JkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEb21haW4gcHJlZml4ZXMgY2Fubm90IGNvbnRhaW4gcmVzZXJ2ZWQgd29yZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIHJlZnVzZXMgcHJlZml4ZXMgd2l0aCBhIHJlc2VydmVkIHdvcmQgYXMgYSBoeXBoZW4tZGVsaW1pdGVkXFxuIyB0b2tlbiwgd2l0aCBvbmx5IGEgZ2VuZXJpYyBlcnJvci4gUGlubmVkIGJ5IGNvbnRyb2xsZWQgcGFpcnM6IC1hd3MtIC9cXG4jIC1hbWF6b24tIC8gLWNvZ25pdG8tIGZhaWwgd2hpbGUgLWF3c29tZS0gZGVwbG95cyAoYmVuY2ggYzA3LWMwN2UpLCBzb1xcbiMgYSB0b2tlbiBtZXJlbHkgY29udGFpbmluZyBhIHdvcmQgc3RheXMgbGVnYWwuXFxuX3BmX2NvZ2Ryd193b3JkcyA6PSB7XFxcImF3c1xcXCIsIFxcXCJhbWF6b25cXFwiLCBcXFwiY29nbml0b1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWRvbWFpbi1yZXNlcnZlZC13b3JkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Eb21haW5cXFwiLFxcblxcdHNwcmludGYoXFxcIkRvbWFpbiBwcmVmaXggJyVzJyBoYXMgdGhlIHJlc2VydmVkIHdvcmQgJyVzJyBhcyBhIHNlZ21lbnQ7IHRoZSBkb21haW4gY3JlYXRlIGZhaWxzIHdpdGggdGhlIGdlbmVyaWMgXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IEFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cXFxcXFxcIlxcXCIsIFtkLCB3XSksXFxuXFx0XFxcIlJlbmFtZSBvciBtZXJnZSB0aGF0IHNlZ21lbnQgKGUuZy4gbXlhcHAtYXV0aCk7IHdvcmRzIG1lcmVseSBpbnNpZGUgYSBsb25nZXIgc2VnbWVudCBhcmUgZmluZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jb2duaXRvLXVzZXItcG9vbHMtYXNzaWduLWRvbWFpbi1wcmVmaXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cXFwiKVxcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Eb21haW5cXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdHNvbWUgdyBpbiBfcGZfY29nZHJ3X3dvcmRzXFxuXFx0dyBpbiBzcGxpdChkLCBcXFwiLVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1tZmEtc21zLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTUZBIHdpdGhvdXQgYW55IGZhY3RvciBjb25maWd1cmF0aW9uIGNhbm5vdCBkZXBsb3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdpdGggTUZBIG9uIGFuZCBubyBFbmFibGVkTWZhcywgQ29nbml0byBmYWxscyBiYWNrIHRvIFNNUyBNRkEsIHdoaWNoXFxuIyBuZWVkcyBTbXNDb25maWd1cmF0aW9uLiBBIHBvb2wgZGVjbGFyaW5nIEVuYWJsZWRNZmFzIChlLmcuIFRPVFAgb25seSxcXG4jIGJlbmNoIGMwNWIpIGlzIHZhbGlkIHdpdGhvdXQgU01TLCBzbyBpdHMgcHJlc2VuY2UgbXV0ZXMgdGhlIHJ1bGUuXFxuIyBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1mYUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIk1mYUNvbmZpZ3VyYXRpb24gJyVzJyB3aXRoIG5vIFNtc0NvbmZpZ3VyYXRpb24gYW5kIG5vIEVuYWJsZWRNZmFzOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlNNUyBjb25maWd1cmF0aW9uIGFuZCBBdXRvIHZlcmlmaWNhdGlvbiBmb3IgcGhvbmVfbnVtYmVyIGFyZSByZXF1aXJlZCB3aGVuIE1GQSBpcyByZXF1aXJlZC9vcHRpb25hbFxcXFxcXFwiXFxcIiwgW21mYV0pLFxcblxcdFxcXCJDb25maWd1cmUgU21zQ29uZmlndXJhdGlvbiAoU01TIE1GQSksIG9yIHBpY2sgZmFjdG9ycyB2aWEgRW5hYmxlZE1mYXMgKGUuZy4gU09GVFdBUkVfVE9LRU5fTUZBKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdG1mYSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1mYUNvbmZpZ3VyYXRpb25cXFwiKVxcblxcdG1mYSBpbiB7XFxcIk9OXFxcIiwgXFxcIk9QVElPTkFMXFxcIn1cXG5cXHRfcGZfY29nbXNjX2Fic2VudChuYW1lLCBcXFwiU21zQ29uZmlndXJhdGlvblxcXCIpXFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIkVuYWJsZWRNZmFzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjb2RlIGFuZCBpbXBsaWNpdCBPQXV0aCBmbG93cyBuZWVkIENhbGxiYWNrVVJMc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3QtYmFzZWQgZmxvd3MgbmVlZCBzb21ld2hlcmUgdG8gcmVkaXJlY3QgdG8uIEFic2VuY2UgaXMgcHJvdmVuXFxuIyBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dvY3JfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtY2FsbGJhY2stcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNhbGxiYWNrVVJMc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3MgaGFzICclcycgYnV0IENhbGxiYWNrVVJMcyBpcyBub3Qgc2V0OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQ2FsbGJhY2tVcmxzIGNhbiBub3QgYmUgZW1wdHkgd2hlbiBjb2RlIGZsb3cgb3IgaW1wbGljaXQgZmxvdyBpcyBzZWxlY3RlZFxcXFxcXFwiXFxcIiwgW2YudmFsdWVdKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBjYWxsYmFjayBVUkxcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiKSkgPT0gdHJ1ZVxcblxcdHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcblxcdGYudmFsdWUgaW4ge1xcXCJjb2RlXFxcIiwgXFxcImltcGxpY2l0XFxcIn1cXG5cXHRfcGZfY29nb2NyX2Fic2VudChuYW1lLCBcXFwiQ2FsbGJhY2tVUkxzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLW9hdXRoLWZsb3dzLXNjb3Blcy1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5hYmxpbmcgT0F1dGggcmVxdWlyZXMgYm90aCBBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGRpcmVjdGlvbnMgZGVwbG95LXZlcmlmaWVkLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2ZzX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ29mc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29nb2ZzX21zZyA6PSBcXFwidGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGFuZCBBbGxvd2VkT0F1dGhTY29wZXMgYXJlIHJlcXVpcmVkIGlmIHVzZXIgcG9vbCBjbGllbnQgaXMgYWxsb3dlZCB0byB1c2UgT0F1dGggZmxvd3MuXFxcXFxcXCJcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWZsb3dzLXNjb3Blcy1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoRmxvd3MgaXMgbm90IHNldDsgJXNcXFwiLCBbX3BmX2NvZ29mc19tc2ddKSxcXG5cXHRcXFwiU2V0IEFsbG93ZWRPQXV0aEZsb3dzLCBvciBkcm9wIEFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiLFxcblxcdF9wZl9jb2dvZnNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiKSkgPT0gdHJ1ZVxcblxcdF9wZl9jb2dvZnNfYWJzZW50KG5hbWUsIFxcXCJBbGxvd2VkT0F1dGhGbG93c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudCBpcyB0cnVlIGJ1dCBBbGxvd2VkT0F1dGhTY29wZXMgaXMgbm90IHNldDsgJXNcXFwiLCBbX3BmX2NvZ29mc19tc2ddKSxcXG5cXHRcXFwiU2V0IEFsbG93ZWRPQXV0aFNjb3Blcywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoU2NvcGVzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBhc3N3b3JkUG9saWN5IE1pbmltdW1MZW5ndGggcnVucyA2IHRvIDk5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIE1pbmltdW1MZW5ndGggYXMgYSBiYXJlIGludGVnZXI7IGJvdGggYm91bmRzXFxuIyBhcmUgZGVwbG95LXZlcmlmaWVkLlxcbl9wZl9jb2dwbWxfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNvZ25pdG8tdXNlcnBvb2wtcGFzc3dvcmRwb2xpY3kuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyB1bmRlciB0aGUgZmxvb3I7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNlxcXFxcXFwiXFxcIiwgW21sXSksXFxuXFx0XFxcIlVzZSBhIG1pbmltdW0gcGFzc3dvcmQgbGVuZ3RoIGJldHdlZW4gNiBhbmQgOTlcXFwiLFxcblxcdF9wZl9jb2dwbWxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtbCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIikpXFxuXFx0bWwgPCA2XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5pbXVtTGVuZ3RoICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA5OVxcXFxcXFwiXFxcIiwgW21sXSksXFxuXFx0XFxcIlVzZSBhIG1pbmltdW0gcGFzc3dvcmQgbGVuZ3RoIGJldHdlZW4gNiBhbmQgOTlcXFwiLFxcblxcdF9wZl9jb2dwbWxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtbCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIikpXFxuXFx0bWwgPiA5OVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tcmVjb3ZlcnktZHVwbGljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZWNvdmVyeSBtZWNoYW5pc21zIGNhbm5vdCByZXBlYXQgcHJpb3JpdGllcyBvciBuYW1lc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGFpcndpc2UgZHVwbGljYXRlIGNoZWNrIG9uIHRoZSBtZWNoYW5pc20gbGlzdDsgdGhlIHNlcnZpY2UgZXJyb3IgbmFtZXNcXG4jIGJvdGggZHVwbGljYXRlIHByaW9yaXRpZXMgYW5kIGR1cGxpY2F0ZSBtZWNoYW5pc20gbmFtZXMuXFxuX3BmX2NvZ3JkcF9kdXAoYSwgYikgaWYge1xcblxcdHBhIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGEsIFxcXCJQcmlvcml0eVxcXCIsIC0xKSlcXG5cXHRwYiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLCBcXFwiUHJpb3JpdHlcXFwiLCAtMikpXFxuXFx0cGEgPT0gcGJcXG59XFxuXFxuX3BmX2NvZ3JkcF9kdXAoYSwgYikgaWYge1xcblxcdG4gOj0gb2JqZWN0LmdldChhLCBcXFwiTmFtZVxcXCIsIFxcXCJfX3BmX2FcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG4gPT0gb2JqZWN0LmdldChiLCBcXFwiTmFtZVxcXCIsIFxcXCJfX3BmX2JcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcmVjb3ZlcnktZHVwbGljYXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zLiVkXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRcXFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyByZXBlYXQgYSBwcmlvcml0eSBvciBuYW1lOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY291bnQgUmVjb3ZlcnkgU2V0dGluZyBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgcHJpb3JpdGllcyBvciByZWNvdmVyeSBtZWNoYW5pc21zLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiR2l2ZSBlYWNoIHJlY292ZXJ5IG1lY2hhbmlzbSBhIGRpc3RpbmN0IHByaW9yaXR5IGFuZCBuYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXJlY292ZXJ5b3B0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGlzX29iamVjdChhLnZhbHVlKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdF9wZl9jb2dyZHBfZHVwKGEudmFsdWUsIGIudmFsdWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1zY2hlbWEtYXR0ci1sZW5ndGgtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNjaGVtYSBhdHRyaWJ1dGUgTWF4TGVuZ3RoIGNhbm5vdCB1bmRlcmN1dCBNaW5MZW5ndGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBjb25zdHJhaW50cyBhcmUgdHlwZWQgYXMgc3RyaW5ncywgc28gbm8gc2NoZW1hIGxheWVyIGNhbiBjb21wYXJlXFxuIyB0aGVtIG51bWVyaWNhbGx5LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1zY2hlbWEtYXR0ci1sZW5ndGgtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuU2NoZW1hLiVkLlN0cmluZ0F0dHJpYnV0ZUNvbnN0cmFpbnRzXFxcIiwgW2F0dC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGhhcyBNaW5MZW5ndGggJXYgb3ZlciBNYXhMZW5ndGggJXY7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiY2Fubm90IGhhdmUgYSBtYXggbGVuZ3RoIHNob3J0ZXIgdGhhbiBpdCdzIG1pbiBsZW5ndGhcXFxcXFxcIlxcXCIsIFtvYmplY3QuZ2V0KGF0dC52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPGF0dHI+XFxcIiksIG1uLCBteF0pLFxcblxcdFxcXCJLZWVwIE1pbkxlbmd0aCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4TGVuZ3RoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXNjaGVtYWF0dHJpYnV0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhdHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVtYVxcXCIpXFxuXFx0aXNfb2JqZWN0KGF0dC52YWx1ZSlcXG5cXHRzYWMgOj0gb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJTdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzYWMpXFxuXFx0bW5fcmF3IDo9IG9iamVjdC5nZXQoc2FjLCBcXFwiTWluTGVuZ3RoXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRtbl9yYXcgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG14X3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1heExlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bXhfcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRtbiA6PSB0b19udW1iZXIobW5fcmF3KVxcblxcdG14IDo9IHRvX251bWJlcihteF9yYXcpXFxuXFx0bW4gPiBteFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tdG9rZW4tZXhwaXJhdGlvbi1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWNjZXNzIGFuZCBpZCB0b2tlbnMgY2Fubm90IG91dGxpdmUgdGhlIHJlZnJlc2ggdG9rZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENyb3NzLXByb3BlcnR5IGluZXF1YWxpdHkgYmV0d2VlbiBkaWZmZXJlbnRseS11bml0ZWQgZHVyYXRpb25zIC0gb25seVxcbiMgY29tcGFyYWJsZSBhZnRlciBub3JtYWxpemluZyB0byBzZWNvbmRzLiBVbml0IGRlZmF1bHRzIGFyZSB0aGVcXG4jIGRlcGxveS12ZXJpZmllZCBob3Vycy9ob3Vycy9kYXlzLlxcbl9wZl9jb2d0ZW9fdW5pdF9zZWNzIDo9IHtcXFwic2Vjb25kc1xcXCI6IDEsIFxcXCJtaW51dGVzXFxcIjogNjAsIFxcXCJob3Vyc1xcXCI6IDM2MDAsIFxcXCJkYXlzXFxcIjogODY0MDB9XFxuXFxuX3BmX2NvZ3Rlb191bml0KG5hbWUsIHVuaXRLZXksIF8pIDo9IHUgaWYge1xcblxcdHUgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRva2VuVmFsaWRpdHlVbml0cy4lc1xcXCIsIFt1bml0S2V5XSkpXFxuXFx0aXNfc3RyaW5nKHUpXFxufVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBkZWZVbml0KSA6PSBkZWZVbml0IGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0dnUgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlRva2VuVmFsaWRpdHlVbml0c1xcXCIsIHt9KVxcblxcdGlzX29iamVjdCh0dnUpXFxuXFx0b2JqZWN0LmdldCh0dnUsIHVuaXRLZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIHZhbEtleSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gcyBpZiB7XFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3ZhbEtleV0pKSlcXG5cXHR1IDo9IF9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBkZWZVbml0KVxcblxcdHMgOj0gdiAqIF9wZl9jb2d0ZW9fdW5pdF9zZWNzW3VdXFxufVxcblxcbl9wZl9jb2d0ZW9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkFjY2VzcyB0b2tlbiB2YWxpZGl0eSAoJXYgcykgZXhjZWVkcyByZWZyZXNoIHRva2VuIHZhbGlkaXR5ICgldiBzKTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBhbmQgSWQgVG9rZW4gZXhwaXJhdGlvbiB0aW1lcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWZyZXNoIHRva2VuIGV4cGlyYXRpb24gdGltZXMuXFxcXFxcXCJcXFwiLCBbYSwgcl0pLFxcblxcdFxcXCJTaG9ydGVuIHRoZSBhY2Nlc3MgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRhIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiQWNjZXNzVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJBY2Nlc3NUb2tlblxcXCIsIFxcXCJob3Vyc1xcXCIpXFxuXFx0ciA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIiwgXFxcIlJlZnJlc2hUb2tlblxcXCIsIFxcXCJkYXlzXFxcIilcXG5cXHRhID4gclxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tZXhwaXJhdGlvbi1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJZCB0b2tlbiB2YWxpZGl0eSAoJXYgcykgZXhjZWVkcyByZWZyZXNoIHRva2VuIHZhbGlkaXR5ICgldiBzKTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBhbmQgSWQgVG9rZW4gZXhwaXJhdGlvbiB0aW1lcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWZyZXNoIHRva2VuIGV4cGlyYXRpb24gdGltZXMuXFxcXFxcXCJcXFwiLCBbaSwgcl0pLFxcblxcdFxcXCJTaG9ydGVuIHRoZSBpZCB0b2tlbiB2YWxpZGl0eSBvciBsZW5ndGhlbiB0aGUgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eVxcXCIsXFxuXFx0X3BmX2NvZ3Rlb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGkgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJJZFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiSWRUb2tlblxcXCIsIFxcXCJob3Vyc1xcXCIpXFxuXFx0ciA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIiwgXFxcIlJlZnJlc2hUb2tlblxcXCIsIFxcXCJkYXlzXFxcIilcXG5cXHRpID4gclxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRva2VuIHZhbGlkaXR5IHJhbmdlcyBkZXBlbmQgb24gdG9rZW4gdHlwZSBhbmQgdW5pdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSB0eXBlcyB0aGUgdmFsaWRpdGllcyBhcyBiYXJlIGludGVnZXJzOyB0aGUgcmVhbCByYW5nZXMgYXJlXFxuIyBwZXIgdG9rZW4gdHlwZSBBTkQgdW5pdCAoYWNjZXNzL2lkOiA1IG1pbnV0ZXMtMSBkYXksIHJlZnJlc2g6IDYwXFxuIyBtaW51dGVzLTEwIHllYXJzKS4gVW5pdCBkZWZhdWx0cyAoaG91cnMvaG91cnMvZGF5cykgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ndHZyX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0dnJfdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0dnJfc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndHZyX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndHZyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbl9wZl9jb2d0dnJfYWlfYmFkKHMpIGlmIHMgPCAzMDBcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzID4gODY0MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzIDwgMzYwMFxcblxcbl9wZl9jb2d0dnJfcnRfYmFkKHMpIGlmIHMgPiAzMTUzNjAwMDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHkgd29ya3Mgb3V0IHRvICV2IHNlY29uZHMsIG91dHNpZGUgNSBtaW51dGVzLTEgZGF5OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSBhY2Nlc3MgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdF9wZl9jb2d0dnJfYWlfYmFkKHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi12YWxpZGl0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJZFRva2VuVmFsaWRpdHkgd29ya3Mgb3V0IHRvICV2IHNlY29uZHMsIG91dHNpZGUgNSBtaW51dGVzLTEgZGF5OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSBpZCB0b2tlbiB2YWxpZGl0eSBiZXR3ZWVuIDUgbWludXRlcyBhbmQgMSBkYXlcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdF9wZl9jb2d0dnJfYWlfYmFkKHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi12YWxpZGl0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDYwIG1pbnV0ZXMtMTAgeWVhcnM7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJhbmdlIGZvciB0b2tlbiB2YWxpZGl0eS5cXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIktlZXAgdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA2MCBtaW51dGVzIGFuZCAxMCB5ZWFyc1xcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0X3BmX2NvZ3R2cl9ydF9iYWQocylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1hdHRyaWJ1dGUtZGVmaW5pdGlvbnMtdXNhZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlIHVzZWQgYnkgYSBrZXkgc2NoZW1hXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRHluYW1vREIgcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2g6IGV2ZXJ5IEF0dHJpYnV0ZURlZmluaXRpb25zIGVudHJ5IG11c3QgYmVcXG4jIHVzZWQgYnkgdGhlIHRhYmxlIGtleSBzY2hlbWEgb3IgYW4gaW5kZXgga2V5IHNjaGVtYS4gVGhlIGVuZ2luZSdzIEUzMDM5XFxuIyBjaGVja3MgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvbmx5IChrZXkgYXR0cmlidXRlIG5vdCBkZWZpbmVkKSwgc28gdGhlXFxuIyBjbGFzc2ljIFxcXCJyZW1vdmVkIGEgR1NJLCBsZWZ0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvblxcXCIgbWlzdGFrZSBzYWlscyB0aHJvdWdoLlxcblxcbl9wZl9kZGJhZHVfdGFibGVfa2V5cyhuYW1lKSA6PSB7YSB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIHByb3ApIDo9IHthIHxcXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdGEgOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfdXNlZChuYW1lKSA6PSAoKF9wZl9kZGJhZHVfdGFibGVfa2V5cyhuYW1lKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIikpIHxcXG5cXHRfcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKVxcblxcbiMgQW55IHVucmVzb2x2YWJsZSBBdHRyaWJ1dGVOYW1lIGluIGEga2V5IHNjaGVtYSBtZWFucyB0aGUgdXNlZC1zZXQgaXNcXG4jIGluY29tcGxldGUsIHNvIHRoZSBydWxlIG11c3Qgc3RheSBzaWxlbnQgcmF0aGVyIHRoYW4gZ3Vlc3MuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0c29tZSBwcm9wIGluIFtcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiXVxcblxcdHNvbWUgaXggaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGl4LnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zLiVkXFxcIiwgW2QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBpcyBkZWZpbmVkIGJ1dCB1c2VkIGJ5IG5vIGtleSBzY2hlbWE7IER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoIGFuZCBmYWlscyB3aXRoIFxcXFxcXFwiTnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gS2V5U2NoZW1hIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggbnVtYmVyIG9mIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2F0dHJdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSB1bnVzZWQgZGVmaW5pdGlvbiAobm9uLWtleSBhdHRyaWJ1dGVzIHN1Y2ggYXMgYSBUVEwgYXR0cmlidXRlIG11c3QgTk9UIGJlIGRlY2xhcmVkKSwgb3IgYWRkIHRoZSBpbmRleCB0aGF0IHVzZXMgaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdG5vdCBfcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKVxcblxcdHNvbWUgZCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGF0dHIgOj0gb2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGF0dHIpXFxuXFx0bm90IGF0dHIgaW4gX3BmX2RkYmFkdV91c2VkKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IG11c3QgbWF0Y2ggQmlsbGluZ01vZGUgKHJlcXVpcmVkIGZvciBQUk9WSVNJT05FRCwgZm9yYmlkZGVuIGZvciBQQVlfUEVSX1JFUVVFU1QpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5SZWFkV3JpdGVDYXBhY2l0eU1vZGUuaHRtbFxcXCJcXG5cXG5fcGZfZGRiYnRfaGFzX3B0KG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIpKVxcblxcbl9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuIyBCaWxsaW5nTW9kZSDjgYzjg6rjg4bjg6njg6sgXFxcIlBST1ZJU0lPTkVEXFxcIuOAgeOBvuOBn+OBr+acquaMh+Wumu+8iOODh+ODleOCqeODq+ODiCBQUk9WSVNJT05FRO+8ieOAglxcbiMg44OI44O844Kv44Oz5YCk77yIUmVmIOetie+8ieOBr+WIpOWumuOBq+S9v+OCj+OBquOBhO+8iOiqpOaknOefpemYsuatou+8ieOAglxcbl9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKSBpZiBub3QgX3BmX2RkYmJ0X2JpbGxpbmdfcHJlc2VudChuYW1lKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLFxcblxcdFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXQgY2Fubm90IGJlIHNwZWNpZmllZCB3aGVuIEJpbGxpbmdNb2RlIGlzIFBBWV9QRVJfUkVRVUVTVDsgQ3JlYXRlVGFibGUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJSZW1vdmUgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggQmlsbGluZ01vZGUgdG8gUFJPVklTSU9ORURcXFwiLFxcblxcdF9wZl9kZGJidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBBWV9QRVJfUkVRVUVTVFxcXCJcXG5cXHRfcGZfZGRiYnRfaGFzX3B0KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLFxcblxcdFxcXCJCaWxsaW5nTW9kZSBpcyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpIGJ1dCBQcm92aXNpb25lZFRocm91Z2hwdXQgaXMgbWlzc2luZzsgQ3JlYXRlVGFibGUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJBZGQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IChSZWFkQ2FwYWNpdHlVbml0cyAvIFdyaXRlQ2FwYWNpdHlVbml0cyksIG9yIHNldCBCaWxsaW5nTW9kZSB0byBQQVlfUEVSX1JFUVVFU1RcXFwiLFxcblxcdF9wZl9kZGJidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSlcXG5cXHRub3QgX3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdHRyaWJ1dGVEZWZpbml0aW9ucyBtdXN0IG5vdCBkZWZpbmUgdGhlIHNhbWUgYXR0cmlidXRlIHR3aWNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZHVwbGljYXRlLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYW5dKSxcXG5cXHRcXFwiS2VlcCBhIHNpbmdsZSBkZWZpbml0aW9uIHBlciBhdHRyaWJ1dGUgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRhbiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYW4pXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpID09IGFuXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZHVwbGljYXRlLWluZGV4LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWNvbmRhcnkgaW5kZXggbmFtZXMgbXVzdCBiZSB1bmlxdWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmRpbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBEdXBsaWNhdGVzIHdpdGhpbiB0aGUgc2FtZSBpbmRleCBsaXN0IG9ubHk7IGEgR1NJL0xTSSBjcm9zcy1saXN0IGNsYXNoIHdhc1xcbiMgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZHVwbGljYXRlLWluZGV4LW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuSW5kZXhOYW1lXFxcIiwgW3Byb3AsIGIuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJJbmRleCBuYW1lICclcycgaXMgdXNlZCBtb3JlIHRoYW4gb25jZTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkR1cGxpY2F0ZSBpbmRleCBuYW1lXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSBzZWNvbmRhcnkgaW5kZXggYSB1bmlxdWUgSW5kZXhOYW1lXFxcIixcXG5cXHRfcGZfZGRiZGluX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhpbmFtZSlcXG5cXHRvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBudWxsKSA9PSBpbmFtZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdsb2JhbFRhYmxlIFJlcGxpY2FzIG11c3QgaW5jbHVkZSB0aGUgZGVwbG95bWVudCByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIG9ubHkgd2hlbiB0aGUgZW5mb3JjZSBwbHVnaW5cXG4jIGtub3dzIHRoZSBhcHAncyBjb25jcmV0ZSByZWdpb24gKHNlZSBzcmMvcHJpdmF0ZS9lbmZvcmNlLnRzKTsgd2l0aG91dCBpdCB0aGVcXG4jIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQgYW5kIHRoaXMgcnVsZSBza2lwcy4gUmVwbGljYXMgd2l0aCB1bnJlc29sdmFibGVcXG4jIFJlZ2lvbiB2YWx1ZXMgYWxzbyBtYWtlIHRoZSBydWxlIHNraXAg4oCUIGFic2VuY2UgY2Fubm90IGJlIHByb3ZlbiB0aGVuLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ2xvYmFsLXRhYmxlLXJlcGxpY2EtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXBsaWNhc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIFJlcGxpY2FzIGxpc3QgJXYgZG9lcyBub3QgaW5jbHVkZSB0aGUgZGVwbG95bWVudCByZWdpb24gJyVzJzsgQ3JlYXRlR2xvYmFsVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBSZXBsaWNhcyBzZWN0aW9uIG11c3QgY29udGFpbiBhbiBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgcmVnaW9uXFxcXFxcXCJcXFwiLCBbcmVwbGljYXMsIHJlZ2lvbl0pLFxcblxcdFxcXCJBZGQgYSByZXBsaWNhIGVudHJ5IGZvciB0aGUgcmVnaW9uIHRoZSBzdGFjayBkZXBsb3lzIHRvIChDREsgVGFibGVWMiBkb2VzIHRoaXMgYXV0b21hdGljYWxseSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi1nbG9iYWx0YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgaXQgaW4gaXRlbXMge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiUmVnaW9uXFxcIiwgbnVsbCkpXFxuXFx0fVxcblxcdHJlcGxpY2FzIDo9IFtyIHwgc29tZSBpdCBpbiBpdGVtczsgciA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiUmVnaW9uXFxcIiwgbnVsbCldXFxuXFx0bm90IHJlZ2lvbiBpbiByZXBsaWNhc1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHU0kgUHJvdmlzaW9uZWRUaHJvdWdocHV0IG11c3QgbWF0Y2ggdGhlIHRhYmxlIEJpbGxpbmdNb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJnYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuIyBHU0ktbGV2ZWwgY291bnRlcnBhcnQgb2YgcGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0ICh3aGljaCBjb3ZlcnMgdGhlXFxuIyB0YWJsZS1sZXZlbCBwYWlyIG9ubHkpLiBTYW1lIHRva2VuIHNhZmV0eTogbGl0ZXJhbCBCaWxsaW5nTW9kZSBvciBhYnNlbnRcXG4jIChkZWZhdWx0IFBST1ZJU0lPTkVEKTsgdG9rZW4gdmFsdWVzIG5ldmVyIGp1ZGdlZC5cXG5fcGZfZGRiZ2J0X2JpbGxpbmdfcHJlc2VudChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIilcXG5cXG5fcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUFJPVklTSU9ORURcXFwiXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiBub3QgX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHNwZWNpZmllcyBQcm92aXNpb25lZFRocm91Z2hwdXQgYnV0IEJpbGxpbmdNb2RlIGlzIFBBWV9QRVJfUkVRVUVTVDsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW4ndCBiZSB1c2VkIHdpdGggUEFZX1BFUl9SRVFVRVNUIEJpbGxpbmdNb2RlXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBHU0kncyBQcm92aXNpb25lZFRocm91Z2hwdXQsIG9yIHN3aXRjaCB0aGUgdGFibGUgdG8gUFJPVklTSU9ORURcXFwiLFxcblxcdF9wZl9kZGJnYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRpc19vYmplY3Qob2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgbnVsbCkpXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgaXMgbWlzc2luZyBQcm92aXNpb25lZFRocm91Z2hwdXQgd2hpbGUgdGhlIHRhYmxlIGJpbGxzIFBST1ZJU0lPTkVEICh0aGUgZGVmYXVsdCk7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCB0byB0aGUgR1NJLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdF9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSlcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdG5vdCBpc19vYmplY3Qob2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgbnVsbCkpXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm9uS2V5QXR0cmlidXRlcyBnb2VzIHdpdGggSU5DTFVERSwgYW5kIG9ubHkgd2l0aCBJTkNMVURFXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJncG5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLXByb2plY3Rpb24uaHRtbFxcXCJcXG5cXG4jIEdTSSBwcm9qZWN0aW9ucyBvbmx5OiB0aGUgTFNJIHNoYXBlIGFuZCB0aGUgS0VZU19PTkxZK05vbktleUF0dHJpYnV0ZXMgY29tYm9cXG4jIHdlcmUgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgdXNlcyBQcm9qZWN0aW9uVHlwZSBJTkNMVURFIHdpdGhvdXQgTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIElOQ0xVREUsIGJ1dCBOb25LZXlBdHRyaWJ1dGVzIGlzIG5vdCBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJMaXN0IHRoZSBwcm9qZWN0ZWQgYXR0cmlidXRlcyBpbiBOb25LZXlBdHRyaWJ1dGVzLCBvciBzd2l0Y2ggUHJvamVjdGlvblR5cGUgdG8gQUxMIC8gS0VZU19PTkxZXFxcIixcXG5cXHRfcGZfZGRiZ3BuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0cHJvaiA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm9qZWN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvailcXG5cXHRvYmplY3QuZ2V0KHByb2osIFxcXCJQcm9qZWN0aW9uVHlwZVxcXCIsIG51bGwpID09IFxcXCJJTkNMVURFXFxcIlxcblxcdGNvdW50KG9iamVjdC5nZXQocHJvaiwgXFxcIk5vbktleUF0dHJpYnV0ZXNcXFwiLCBbXSkpID09IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm9qZWN0aW9uXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBjb21iaW5lcyBQcm9qZWN0aW9uVHlwZSBBTEwgd2l0aCBOb25LZXlBdHRyaWJ1dGVzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvamVjdGlvblR5cGUgaXMgQUxMLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJEcm9wIE5vbktleUF0dHJpYnV0ZXMgKEFMTCBhbHJlYWR5IHByb2plY3RzIGV2ZXJ5dGhpbmcpLCBvciBzd2l0Y2ggUHJvamVjdGlvblR5cGUgdG8gSU5DTFVERVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiQUxMXFxcIlxcblxcdGNvdW50KG9iamVjdC5nZXQocHJvaiwgXFxcIk5vbktleUF0dHJpYnV0ZXNcXFwiLCBbXSkpID4gMFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLZXlTY2hlbWEgbXVzdCBiZSBbSEFTSF0gb3IgW0hBU0gsIFJBTkdFXVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRia3NoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCJcXG5cXG4jIFRhYmxlLWxldmVsIGtleSBzY2hlbWEgb25seTogaW5kZXgga2V5IHNjaGVtYXMgcHJvZHVjZSBkaWZmZXJlbnQgc2VydmljZVxcbiMgZXJyb3JzIGFuZCB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG5fcGZfZGRia3NoX3R5cGUobmFtZSwgaSkgOj0ga3QgaWYge1xcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0aXQuaW5kZXggPT0gaVxcblxcdGt0IDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMC5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgZmlyc3QgS2V5U2NoZW1hIGVsZW1lbnQgbXVzdCBiZSBIQVNILCBnb3QgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgS2V5U2NoZW1hOiBUaGUgZmlyc3QgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBIQVNIIGtleSB0eXBlXFxcXFxcXCJcXFwiLCBba3RdKSxcXG5cXHRcXFwiUHV0IHRoZSBwYXJ0aXRpb24ga2V5IChLZXlUeXBlIEhBU0gpIGZpcnN0IGFuZCB0aGUgb3B0aW9uYWwgc29ydCBrZXkgKFJBTkdFKSBzZWNvbmRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDApXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJIQVNIXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYS4xLktleVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBzZWNvbmQgS2V5U2NoZW1hIGVsZW1lbnQgbXVzdCBiZSBSQU5HRSwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIHNlY29uZCBLZXlTY2hlbWFFbGVtZW50IGlzIG5vdCBhIFJBTkdFIGtleSB0eXBlXFxcXFxcXCJcXFwiLCBba3RdKSxcXG5cXHRcXFwiVXNlIGV4YWN0bHkgb25lIEhBU0ggZWxlbWVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBvbmUgUkFOR0UgZWxlbWVudFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRrdCA6PSBfcGZfZGRia3NoX3R5cGUobmFtZSwgMSlcXG5cXHRpc19zdHJpbmcoa3QpXFxuXFx0a3QgIT0gXFxcIlJBTkdFXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiS2V5U2NoZW1hIGNhbiBob2xkIGF0IG1vc3QgMiBlbGVtZW50cyAoSEFTSCArIG9wdGlvbmFsIFJBTkdFKSwgZ290ICVkXFxcIiwgW25dKSxcXG5cXHRcXFwiTW9kZWwgZXh0cmEgYWNjZXNzIHBhdHRlcm5zIGFzIGdsb2JhbCBvciBsb2NhbCBzZWNvbmRhcnkgaW5kZXhlcyBpbnN0ZWFkXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdG4gOj0gY291bnQoWzEgfCBzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXSlcXG5cXHRuID4gMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWtpbmVzaXMtc3RyZWFtLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgS2luZXNpcyBzdHJlYW1pbmcgZGVzdGluYXRpb24gbXVzdCBiZSBpbiB0aGUgdGFibGUncyByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIEtpbmVzaXMgRGF0YSBTdHJlYW1zIGRlc3RpbmF0aW9uIG11c3QgbGl2ZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlXFxuIyB0YWJsZS4gVGhlIGRlcGxveS10aW1lIGZhaWx1cmUgbW9kZSBpcyB1Z2x5OiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgdGhlXFxuIyBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcywgYW5kIENsb3VkRm9ybWF0aW9uIHJvbGxzIGJhY2sgb25cXG4jIE5vdFN0YWJpbGl6ZWQgbWludXRlcyBsYXRlciDigJQgbm90aGluZyBuYW1lcyB0aGUgcmVnaW9uIG1pc21hdGNoLlxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IGluIGVuZm9yY2UgbW9kZSB3aXRoIGFcXG4jIGNvbmNyZXRlIHJlZ2lvbjsgb3RoZXJ3aXNlIHRoaXMgcnVsZSBza2lwcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtpbmVzaXMtc3RyZWFtLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgS2luZXNpcyBzdHJlYW0gbGl2ZXMgaW4gJyVzJyBidXQgdGhlIHRhYmxlIGRlcGxveXMgdG8gJyVzJzsgdGhlIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBuZXZlciBzdGFiaWxpemVzIGFuZCB0aGUgc3RhY2sgcm9sbHMgYmFja1xcXCIsIFtzdHJlYW1SZWdpb24sIHJlZ2lvbl0pLFxcblxcdFxcXCJQb2ludCBLaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm4gYXQgYSBzdHJlYW0gaW4gdGhlIHRhYmxlJ3Mgb3duIHJlZ2lvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUva2RzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0aXNfc3RyaW5nKHJlZ2lvbilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJraW5lc2lzXFxcIlxcblxcdHN0cmVhbVJlZ2lvbiA6PSBwYXJ0c1szXVxcblxcdHN0cmVhbVJlZ2lvbiAhPSBcXFwiXFxcIlxcblxcdHN0cmVhbVJlZ2lvbiAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1sc2ktYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTFNJIGtleSBhdHRyaWJ1dGVzIG11c3QgYmUgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAzOSBjaGVja3MgdGFibGUgYW5kIEdTSSBrZXkgc2NoZW1hcyBhZ2FpbnN0XFxuIyBBdHRyaWJ1dGVEZWZpbml0aW9ucyBidXQgaXMgYmxpbmQgdG8gTG9jYWxTZWNvbmRhcnlJbmRleGVzIChtZWFzdXJlZFxcbiMgMjAyNi0wOS0wMiwgMS43LjAtYmV0YSkuIFRoaXMgcnVsZSBjb3ZlcnMgZXhhY3RseSB0aGF0IGdhcC5cXG5cXG5fcGZfZGRibGFkX2RlZnMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgZCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEgOj0gb2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbiMgSWYgYW55IGRlZmluaXRpb24ncyBuYW1lIGlzIHVucmVzb2x2YWJsZSB0aGUgc2V0IGlzIGluY29tcGxldGUg4oCUIHN0YXkgc2lsZW50Llxcbl9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRldmVyeSBkIGluIFt4IHwgc29tZSB4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXSB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG5cXHR9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMU0kga2V5IGF0dHJpYnV0ZSAnJXMnIGlzIG5vdCBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiQW4gYXR0cmlidXRlIHJlZmVyZW5jZWQgaW4gYSBLZXlTY2hlbWEgZWxlbWVudCBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2F0dHJdKSxcXG5cXHRcXFwiQWRkIHRoZSBhdHRyaWJ1dGUgdG8gQXR0cmlidXRlRGVmaW5pdGlvbnMgKGFuZCBub3doZXJlIGVsc2U6IG9ubHkga2V5IGF0dHJpYnV0ZXMgYmVsb25nIHRoZXJlKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtbG9jYWxzZWNvbmRhcnlpbmRleC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGNvdW50KF9wZl9kZGJsYWRfZGVmcyhuYW1lKSkgPiAwXFxuXFx0X3BmX2RkYmxhZF9kZWZzX3Jlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdGF0dHIgOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGF0dHIpXFxuXFx0bm90IGF0dHIgaW4gX3BmX2RkYmxhZF9kZWZzKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gTFNJIG5lZWRzIGEgUkFOR0Uga2V5IGFuZCB0aGUgdGFibGUncyBsZWFkaW5nIGhhc2gga2V5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJsc2hfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCJcXG5cXG5fcGZfZGRibHNoX2tleXR5cGVzKGtzKSA6PSB7a3QgfFxcblxcdHNvbWUgayBpbiBrc1xcblxcdGt0IDo9IG9iamVjdC5nZXQoaywgXFxcIktleVR5cGVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhrdClcXG59XFxuXFxuIyBPbmx5IGp1ZGdlIGEga2V5IHNjaGVtYSB3aG9zZSBLZXlUeXBlcyBhcmUgYWxsIGxpdGVyYWwgc3RyaW5ncy5cXG5fcGZfZGRibHNoX3Jlc29sdmFibGUoa3MpIGlmIGNvdW50KF9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpKSA+IDBcXG5cXG5fcGZfZGRibHNoX3Jlc29sdmFibGVfYWxsKGtzKSBpZiB7XFxuXFx0ZXZlcnkgayBpbiBrcyB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoaywgXFxcIktleVR5cGVcXFwiLCBudWxsKSlcXG5cXHR9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItbHNpLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxvY2FsIHNlY29uZGFyeSBpbmRleCAnJXMnIGhhcyBubyBSQU5HRSBrZXk7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSBhIHJhbmdlIGtleSBmb3IgaW5kZXhcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJHaXZlIHRoZSBMU0kgYSBzb3J0IGtleTogW3RhYmxlIEhBU0gga2V5LCBpdHMgb3duIFJBTkdFIGtleV1cXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGtzIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdGNvdW50KGtzKSA+IDBcXG5cXHRfcGZfZGRibHNoX3Jlc29sdmFibGVfYWxsKGtzKVxcblxcdG5vdCBcXFwiUkFOR0VcXFwiIGluIF9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItbHNpLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxvY2FsIHNlY29uZGFyeSBpbmRleCAnJXMnIHVzZXMgaGFzaCBrZXkgJyVzJyBidXQgdGhlIHRhYmxlJ3MgaGFzaCBrZXkgaXMgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkluZGV4IEtleVNjaGVtYSBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIGxlYWRpbmcgaGFzaCBrZXkgYXMgdGFibGUgS2V5U2NoZW1hXFxcXFxcXCJcXFwiLCBbaW5hbWUsIGxzaUhhc2gsIHRhYmxlSGFzaF0pLFxcblxcdFxcXCJBbiBMU0kgbXVzdCByZXVzZSB0aGUgdGFibGUncyBwYXJ0aXRpb24ga2V5OyB1c2UgYSBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4IGZvciBhIGRpZmZlcmVudCBoYXNoIGtleVxcXCIsXFxuXFx0X3BmX2RkYmxzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0dC5pbmRleCA9PSAwXFxuXFx0dGFibGVIYXNoIDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh0YWJsZUhhc2gpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGtzIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdHNvbWUgayBpbiBrc1xcblxcdG9iamVjdC5nZXQoaywgXFxcIktleVR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSEFTSFxcXCJcXG5cXHRsc2lIYXNoIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhsc2lIYXNoKVxcblxcdGxzaUhhc2ggIT0gdGFibGVIYXNoXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWJsZU5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgKG1pbmltdW0gMyBjaGFyYWN0ZXJzKSBpcyBlbmZvcmNlZC4gVGhlIDI1NS1jaGFyXFxuIyBtYXhpbXVtIGFuZCB0aGUgY2hhcmFjdGVyIHBhdHRlcm4gd2VyZSBub3QgbWVhc3VyZWQuIE5vdGUgcmVzb2x2ZSgpIHR1cm5zIGFcXG4jIFJlZi10by1yZXNvdXJjZSBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElEOyBhIGxvZ2ljYWwgSUQgc2hvcnQgZW5vdWdoIHRvXFxuIyB0cmlwIHRoaXMgcnVsZSB3aGlsZSBmZWVkaW5nIGEgVGFibGVOYW1lIGlzIHRyZWF0ZWQgYXMgdGhlIGJ1ZyBpdCBhbG1vc3RcXG4jIGNlcnRhaW5seSBpcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHNob3J0ZXIgdGhhbiAzIGNoYXJhY3RlcnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gM1xcXFxcXFwiXFxcIiwgW3RuXSksXFxuXFx0XFxcIlVzZSBhIHRhYmxlIG5hbWUgb2YgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLCBvciBvbWl0IFRhYmxlTmFtZSBhbmQgbGV0IENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0Y291bnQodG4pIDwgM1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1pbnN0YW5jZS1hbWktYXJjaFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnN0YW5jZSB0eXBlIGFyY2hpdGVjdHVyZSBtdXN0IG1hdGNoIHRoZSBTU00gcHVibGljLXBhcmFtZXRlciBBTUkgYXJjaGl0ZWN0dXJlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyaWFhX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWxcXFwiXFxuXFxuIyBHcmF2aXRvbiBuYW1pbmcgY29udmVudGlvbjogYSBcXFwiZ1xcXCIgYW1vbmcgdGhlIGxldHRlcnMgYWZ0ZXIgdGhlXFxuIyBnZW5lcmF0aW9uIGRpZ2l0ICh0NGcsIGM3Z24sIGltNGduLCBnNWcpLCBwbHVzIHRoZSBwcmUtY29udmVudGlvbiBhMS5cXG4jIG1hYyogZmFtaWxpZXMgYXJlIGV4Y2x1ZGVkIGZyb20ganVkZ21lbnQgZW50aXJlbHkuXFxuX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSkgaWYgcmVnZXgubWF0Y2goYF5bYS16XStbMC05XStbYS16MC05XSpnW2EtejAtOV0qJGAsIGZhbSlcXG5cXG5fcGZfZWMyaWFhX2FybV9mYW0oZmFtKSBpZiBmYW0gPT0gXFxcImExXFxcIlxcblxcbl9wZl9lYzJpYWFfZmFtKG5hbWUpIDo9IGZhbSBpZiB7XFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRmYW0gOj0gc3BsaXQoaXQsIFxcXCIuXFxcIilbMF1cXG5cXHRub3Qgc3RhcnRzd2l0aChmYW0sIFxcXCJtYWNcXFwiKVxcbn1cXG5cXG4jIHt7cmVzb2x2ZTpzc206Li4ufX0gc3RyaW5ncyBzdXJmYWNlIGFzIHtcXFwiX19keW5hbWljXFxcIjogXFxcImR5bmFtaWNcXG4jIHJlZmVyZW5jZToge3tyZXNvbHZlOnNzbTo8cGF0aD59fVxcXCJ9IG1hcmtlciBvYmplY3RzIChtZWFzdXJlZFxcbiMgMjAyNi0wOS0wMyk7IHRoZSByZWZlcmVuY2UgdGV4dCBpcyByZWFkIGZyb20gdGhlIG1hcmtlci5cXG5fcGZfZWMyaWFhX2ltZyhuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkltYWdlSWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChyYXcpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHJhdywgXFxcIl9fZHluYW1pY1xcXCIsIFxcXCJcXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdGNvbnRhaW5zKGQsIFxcXCJ7e3Jlc29sdmU6c3NtOlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgeDg2XzY0IGJ1dCB0aGUgQU1JIHBhcmFtZXRlciBwYXRoIG5hbWVzIGFybTY0OyB0aGUgbGF1bmNoIGZhaWxzIHdpdGggYW4gYXJjaGl0ZWN0dXJlIG1pc21hdGNoXFxcIiwgW3Jlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIildKSxcXG5cXHRcXFwiVXNlIGFuIGFybTY0IChHcmF2aXRvbikgaW5zdGFuY2UgdHlwZSBvciB0aGUgeDg2XzY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRub3QgX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSlcXG5cXHRpbWcgOj0gX3BmX2VjMmlhYV9pbWcobmFtZSlcXG5cXHRjb250YWlucyhpbWcsIFxcXCJhcm02NFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgYXJtNjQgKEdyYXZpdG9uKSBidXQgdGhlIEFNSSBwYXJhbWV0ZXIgcGF0aCBuYW1lcyB4ODZfNjQ7IHRoZSBsYXVuY2ggZmFpbHMgd2l0aCBhbiBhcmNoaXRlY3R1cmUgbWlzbWF0Y2hcXFwiLCBbcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKV0pLFxcblxcdFxcXCJVc2UgYW4geDg2XzY0IGluc3RhbmNlIHR5cGUgb3IgdGhlIGFybTY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRfcGZfZWMyaWFhX2FybV9mYW0oZmFtKVxcblxcdGltZyA6PSBfcGZfZWMyaWFhX2ltZyhuYW1lKVxcblxcdGNvbnRhaW5zKGltZywgXFxcIng4Nl82NFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLW5hdGd3LWFsbG9jYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTkFUIGdhdGV3YXkgQWxsb2NhdGlvbklkIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgY29ubmVjdGl2aXR5IGFuZCBmb3JiaWRkZW4gZm9yIHByaXZhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpOYXRHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMm5nYV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ29ubmVjdGl2aXR5VHlwZSBkZWZhdWx0cyB0byBwdWJsaWM7IGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBza2lwcyBib3RoIGRpcmVjdGlvbnMuXFxuX3BmX2VjMm5nYV9wdWJsaWMobmFtZSkgaWYgX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwgXFxcIkNvbm5lY3Rpdml0eVR5cGVcXFwiKVxcblxcbl9wZl9lYzJuZ2FfcHVibGljKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwdWJsaWNcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwcml2YXRlIE5BVCBnYXRld2F5IGNhbm5vdCB0YWtlIEFsbG9jYXRpb25JZCAoXFxcXFxcXCJBbGxvY2F0aW9uSWQgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBOQVQgR2F0ZXdheSB3aXRoIENvbm5lY3Rpdml0eSBUeXBlIHByaXZhdGUuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIEFsbG9jYXRpb25JZCwgb3Igc3dpdGNoIENvbm5lY3Rpdml0eVR5cGUgdG8gcHVibGljXFxcIixcXG5cXHRfcGZfZWMybmdhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwcml2YXRlXFxcIlxcblxcdG5vdCBfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwdWJsaWMgTkFUIGdhdGV3YXkgcmVxdWlyZXMgQWxsb2NhdGlvbklkIChcXFxcXFxcIlRoZSByZXF1ZXN0IG11c3QgaW5jbHVkZSB0aGUgQWxsb2NhdGlvbklkIHBhcmFtZXRlci5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJBbGxvY2F0ZSBhbiBFSVAgYW5kIHBhc3MgaXRzIEFsbG9jYXRpb25JZCwgb3Igc2V0IENvbm5lY3Rpdml0eVR5cGU6IHByaXZhdGVcXFwiLFxcblxcdF9wZl9lYzJuZ2FfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVxcXCIpXFxuXFx0X3BmX2VjMm5nYV9wdWJsaWMobmFtZSlcXG5cXHRfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcGctY2x1c3Rlci1idXJzdGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVyc3RhYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNsdXN0ZXIgcGxhY2VtZW50IGdyb3Vwc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ3Jvc3MtcmVzb3VyY2U6IG9ubHkgZmlyZXMgd2hlbiB0aGUgcmVmZXJlbmNlZCBwbGFjZW1lbnQgZ3JvdXAgaXMgaW5cXG4jIHRoZSB0ZW1wbGF0ZSB3aXRoIFN0cmF0ZWd5IGNsdXN0ZXIuIEEgbGl0ZXJhbCAocHJlLWV4aXN0aW5nKSBncm91cFxcbiMgbmFtZSBjYXJyaWVzIG5vIHN0cmF0ZWd5IGluZm9ybWF0aW9uIGFuZCBzdGF5cyBzaWxlbnQuXFxuX3BmX2VjMnBnYl9idXJzdGFibGUoZmFtKSBpZiBmYW0gaW4ge1xcXCJ0MlxcXCIsIFxcXCJ0M1xcXCIsIFxcXCJ0M2FcXFwiLCBcXFwidDRnXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1wZy1jbHVzdGVyLWJ1cnN0YWJsZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbHVzdGVyIHBsYWNlbWVudCBncm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICclcycgaW5zdGFuY2UgdHlwZTsgdGhlIGxhdW5jaCBmYWlscyBhdCBkZXBsb3lcXFwiLCBbaXRdKSxcXG5cXHRcXFwiVXNlIGEgbm9uLWJ1cnN0YWJsZSB0eXBlLCBvciBhIHNwcmVhZC9wYXJ0aXRpb24gcGxhY2VtZW50IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3BsYWNlbWVudC1ncm91cHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCIpXFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRfcGZfZWMycGdiX2J1cnN0YWJsZShzcGxpdChpdCwgXFxcIi5cXFwiKVswXSlcXG5cXHRwZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYWNlbWVudEdyb3VwTmFtZVxcXCIpXFxuXFx0cGcgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFxcXCIpXFxuXFx0cmVzb2x2ZShwZywgXFxcIlByb3BlcnRpZXMuU3RyYXRlZ3lcXFwiKSA9PSBcXFwiY2x1c3RlclxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcm91dGUtdGFyZ2V0LWV4YWN0bHktb25lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcm91dGUgbXVzdCBuYW1lIGV4YWN0bHkgb25lIHRhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlJvdXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgMTEgdGFyZ2V0IHByb3BlcnRpZXMsIHN0cmFpZ2h0IGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlLlxcbl9wZl9lYzJydGVfdGFyZ2V0cyA6PSBbXFxcIkdhdGV3YXlJZFxcXCIsIFxcXCJMb2NhbEdhdGV3YXlJZFxcXCIsIFxcXCJDYXJyaWVyR2F0ZXdheUlkXFxcIiwgXFxcIk5hdEdhdGV3YXlJZFxcXCIsIFxcXCJOZXR3b3JrSW50ZXJmYWNlSWRcXFwiLCBcXFwiVnBjUGVlcmluZ0Nvbm5lY3Rpb25JZFxcXCIsIFxcXCJFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWRcXFwiLCBcXFwiVHJhbnNpdEdhdGV3YXlJZFxcXCIsIFxcXCJWcGNFbmRwb2ludElkXFxcIiwgXFxcIkNvcmVOZXR3b3JrQXJuXFxcIiwgXFxcIkluc3RhbmNlSWRcXFwiXVxcblxcbl9wZl9lYzJydGVfY291bnQobmFtZSkgOj0gbiBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMycnRlX3RhcmdldHM7IG9iamVjdC5nZXQocHJvcHMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1yb3V0ZS10YXJnZXQtZXhhY3RseS1vbmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcm91dGUgbmFtZXMgJXYgdGFyZ2V0czsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9mIEdhdGV3YXlJZCwgTG9jYWxHYXRld2F5SWQsIENhcnJpZXJHYXRld2F5SWQsIE5hdEdhdGV3YXlJZCwgTmV0d29ya0ludGVyZmFjZUlkLCBWcGNQZWVyaW5nQ29ubmVjdGlvbklkLCBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQsIFRyYW5zaXRHYXRld2F5SWQsIFZwY0VuZHBvaW50SWQsIENvcmVOZXR3b3JrQXJuIG9yIEluc3RhbmNlSWRcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgdGFyZ2V0IHByb3BlcnR5IG9uIHRoZSByb3V0ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1yb3V0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlJvdXRlXFxcIilcXG5cXHRuIDo9IF9wZl9lYzJydGVfY291bnQobmFtZSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctY2lkci12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIENpZHJJcCBtdXN0IGJlIGEgd2VsbC1mb3JtZWQgSVB2NCBDSURSXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyc2N2X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpIGlmIHtcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHR0b19udW1iZXIoc3BsaXQoYywgXFxcIi9cXFwiKVsxXSkgPiAzMlxcbn1cXG5cXG5fcGZfZWMyc2N2X21hbGZvcm1lZChjKSBpZiB7XFxuXFx0cmVnZXgubWF0Y2goYF5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsvWzAtOV0rJGAsIGMpXFxuXFx0c29tZSBvIGluIHNwbGl0KHNwbGl0KGMsIFxcXCIvXFxcIilbMF0sIFxcXCIuXFxcIilcXG5cXHR0b19udW1iZXIobykgPiAyNTVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5DaWRySXBcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ2lkcklwICclcycgaXMgbWFsZm9ybWVkIChvY3RldHMgbXVzdCBiZSAwLTI1NSwgcHJlZml4IDAtMzIpOyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQ0lEUiBibG9jayAlcyBpcyBtYWxmb3JtZWRcXFxcXFxcIlxcXCIsIFtjLCBjXSksXFxuXFx0XFxcIkZpeCB0aGUgQ0lEUiBub3RhdGlvblxcXCIsXFxuXFx0X3BmX2VjMnNjdl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdGMgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIkNpZHJJcFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0X3BmX2VjMnNjdl9tYWxmb3JtZWQoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDaWRySXAgJyVzJyBpcyBtYWxmb3JtZWQgKG9jdGV0cyBtdXN0IGJlIDAtMjU1LCBwcmVmaXggMC0zMik7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJDSURSIGJsb2NrICVzIGlzIG1hbGZvcm1lZFxcXFxcXFwiXFxcIiwgW2MsIGNdKSxcXG5cXHRcXFwiRml4IHRoZSBDSURSIG5vdGF0aW9uXFxcIixcXG5cXHRfcGZfZWMyc2N2X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRfcGZfZWMyc2N2X21hbGZvcm1lZChjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIG5hbWVzIG1heSBub3Qgc3RhcnQgd2l0aCBzZy1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctZ3JvdXAtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJHcm91cE5hbWUgJyVzJyBzdGFydHMgd2l0aCB0aGUgcmVzZXJ2ZWQgcHJlZml4OyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiR3JvdXAgbmFtZXMgbWF5IG5vdCBiZSBpbiB0aGUgZm9ybWF0IHNnLSpcXFxcXFxcIlxcXCIsIFtnbl0pLFxcblxcdFxcXCJQaWNrIGEgbmFtZSB0aGF0IGRvZXMgbm90IHN0YXJ0IHdpdGggc2ctXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZWN1cml0eUdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0Z24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Hcm91cE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhnbilcXG5cXHRzdGFydHN3aXRoKGduLCBcXFwic2ctXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctc291cmNlLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHNlY3VyaXR5IGdyb3VwIHJ1bGUgdGFrZXMgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyc3NlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbiMgVGhlIG1lbWJlciBzZXRzIGNvbWUgdmVyYmF0aW0gZnJvbSB0aGUgRUMyIGVycm9yIG1lc3NhZ2VzLlxcbl9wZl9lYzJzc2Vfc2V0cyA6PSB7XFxcImluXFxcIjogW1xcXCJDaWRySXBcXFwiLCBcXFwiQ2lkcklwdjZcXFwiLCBcXFwiU291cmNlU2VjdXJpdHlHcm91cElkXFxcIiwgXFxcIlNvdXJjZVByZWZpeExpc3RJZFxcXCJdLCBcXFwib3V0XFxcIjogW1xcXCJDaWRySXBcXFwiLCBcXFwiQ2lkcklwdjZcXFwiLCBcXFwiRGVzdGluYXRpb25QcmVmaXhMaXN0SWRcXFwiLCBcXFwiRGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWRcXFwiXX1cXG5cXG5fcGZfZWMyc3NlX2RpcmtleSA6PSB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIjogXFxcImluXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiOiBcXFwib3V0XFxcIn1cXG5cXG5fcGZfZWMyc3NlX3JrZXkgOj0ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiOiBcXFwiaW5cXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiOiBcXFwib3V0XFxcIn1cXG5cXG5fcGZfZWMyc3NlX2NvdW50KGVudHJ5LCBzZXRrZXkpIDo9IG4gaWYge1xcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRuIDo9IGNvdW50KFtrIHwgc29tZSBrIGluIF9wZl9lYzJzc2Vfc2V0c1tzZXRrZXldOyBvYmplY3QuZ2V0KGVudHJ5LCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXSlcXG59XFxuXFxuIyBFbWJlZGRlZCBydWxlczogdHdvIG9yIG1vcmUgbWVtYmVycyBpcyBhbiBlcnJvcjsgemVybyBpcyB0b2xlcmF0ZWRcXG4jIChhIHNvdXJjZS1sZXNzIGVtYmVkZGVkIGluZ3Jlc3MgZGVwbG95ZWQgY2xlYW4gb24gMjAyNi0wOS0wMykuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctc291cmNlLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZFxcXCIsIFtkaXIsIGl0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcnVsZSBzZXRzICV2IG9mICV2OyBFQzIgYWxsb3dzIG9ubHkgb25lIChcXFxcXFxcIk9ubHkgb25lIG9mICVzIGNhbiBiZSBzcGVjaWZpZWRcXFxcXFxcIilcXFwiLCBbbiwgX3BmX2VjMnNzZV9zZXRzW2tdLCBjb25jYXQoXFxcIiwgXFxcIiwgX3BmX2VjMnNzZV9zZXRzW2tdKV0pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIHNvdXJjZS9kZXN0aW5hdGlvbiBmaWVsZCBvbiB0aGUgcnVsZVxcXCIsXFxuXFx0X3BmX2VjMnNzZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRrIDo9IF9wZl9lYzJzc2VfZGlya2V5W2Rpcl1cXG5cXHRuIDo9IF9wZl9lYzJzc2VfY291bnQoaXRlbS52YWx1ZSwgaylcXG5cXHRuID49IDJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctc291cmNlLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBydWxlIHNldHMgJXYgb2YgJXY7IEVDMiByZXF1aXJlcyBleGFjdGx5IG9uZSAoXFxcXFxcXCJFeGFjdGx5IG9uZSBvZiAlcyBtdXN0IGJlIHNwZWNpZmllZCBhbmQgbm90IGVtcHR5XFxcXFxcXCIpXFxcIiwgW24sIF9wZl9lYzJzc2Vfc2V0c1trXSwgY29uY2F0KFxcXCIsIFxcXCIsIF9wZl9lYzJzc2Vfc2V0c1trXSldKSxcXG5cXHRcXFwiU2V0IGV4YWN0bHkgb25lIHNvdXJjZS9kZXN0aW5hdGlvbiBmaWVsZCBvbiB0aGUgcnVsZSByZXNvdXJjZVxcXCIsXFxuXFx0X3BmX2VjMnNzZV91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0ayA6PSBfcGZfZWMyc3NlX3JrZXlbcnR5cGVdXFxuXFx0biA6PSBfcGZfZWMyc3NlX2NvdW50KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBrKVxcblxcdG4gIT0gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi11c2VyZGF0YS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDMiB1c2VyIGRhdGEgaXMgbGltaXRlZCB0byAxNjM4NCBieXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl91ZHN6X2ZpeCA6PSBcXFwiS2VlcCB1c2VyIGRhdGEgdW5kZXIgMTYzODQgYnl0ZXM7IG1vdmUgbGFyZ2UgcGF5bG9hZHMgdG8gUzMgYW5kIGZldGNoIHRoZW0gZnJvbSBhIHNtYWxsIGJvb3RzdHJhcCBzY3JpcHRcXFwiXFxuXFxuX3BmX3Vkc3pfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2VkYXRhLWFkZC11c2VyLWRhdGEuaHRtbFxcXCJcXG5cXG5fcGZfdWRzel9saW1pdCA6PSAxNjM4NFxcblxcbiMgYmFzZTY0IOaWh+Wtl+WIl+OBruODh+OCs+ODvOODieW+jOODkOOCpOODiOaVsO+8iOODkeODh+OCo+ODs+OCsOiAg+aFru+8iVxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAyIGlmIGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDEgaWYge1xcblxcdGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXHRub3QgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG59XFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoY291bnQocykgKiAzKSAvIDQgaWYgbm90IGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXG5fcGZfdWRzel9wYXRocyA6PSB7XFxuXFx0XFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLlVzZXJEYXRhXFxcIixcXG5cXHRcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIjogXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVEYXRhLlVzZXJEYXRhXFxcIixcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYzjg6rjg4bjg6njg6sgYmFzZTY0IOaWh+Wtl+WIl+OBruOCseODvOOCuVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGRlY29kZXMgdG8gYWJvdXQgJXYgYnl0ZXMsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW3NpemUsIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19zdHJpbmcodWQpXFxuXFx0c2l6ZSA6PSBfcGZfdWRzel9kZWNvZGVkKHVkKVxcblxcdHNpemUgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjCB7XFxcIkZuOjpCYXNlNjRcXFwiOiBcXFwiPGxpdGVyYWw+XFxcIn0g44Gu44Kx44O844K577yI44Ko44Oz44Kz44O844OJ5YmN44Gu55Sf44OQ44Kk44OI5pWw44Gn5Yik5a6a77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgaXMgJWQgYnl0ZXMgYmVmb3JlIGJhc2U2NCBlbmNvZGluZywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbY291bnQoaW5uZXIpLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfb2JqZWN0KHVkKVxcblxcdGlubmVyIDo9IG9iamVjdC5nZXQodWQsIFxcXCJGbjo6QmFzZTY0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5uZXIpXFxuXFx0Y291bnQoaW5uZXIpID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUJTIElvcHMvVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgdHlwZSdzIHN1cHBvcnRlZCByYW5nZXMgYW5kIHJhdGlvc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl92b2xpb3BzX2ZpeCA6PSBcXFwiTWF0Y2ggSW9wcy9UaHJvdWdocHV0IHRvIHRoZSB2b2x1bWUgdHlwZTogZ3AzIDMwMDAtODAwMDAgSU9QUyAobWF4IDUwMC9HaUIsIHRocm91Z2hwdXQgMTI1LTIwMDAgTWlCL3MgYW5kIGF0IG1vc3QgSU9QUy80KSwgaW8xIDEwMC02NDAwMCAobWF4IDUwL0dpQiksIGlvMiAxMDAtMjU2MDAwIChtYXggMTAwMC9HaUIpOyBncDIvc3QxL3NjMS9zdGFuZGFyZCBhY2NlcHQgbmVpdGhlciBwcm9wZXJ0eVxcXCJcXG5cXG5fcGZfdm9saW9wc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfcmFuZ2UgOj0ge1xcXCJncDNcXFwiOiBbMzAwMCwgODAwMDBdLCBcXFwiaW8xXFxcIjogWzEwMCwgNjQwMDBdLCBcXFwiaW8yXFxcIjogWzEwMCwgMjU2MDAwXX1cXG5cXG5fcGZfdm9saW9wc19wZXJfZ2liIDo9IHtcXFwiZ3AzXFxcIjogNTAwLCBcXFwiaW8xXFxcIjogNTAsIFxcXCJpbzJcXFwiOiAxMDAwfVxcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPCBsb1xcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPiBoaVxcblxcbl9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxuXFxuIyBJT1BTIOOBjOWei+OBlOOBqOOBrue1tuWvvuODrOODs+OCuOWkllxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgJWQtJWQgZm9yICVzIHZvbHVtZXNcXFwiLCBbbiwgclswXSwgclsxXSwgdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyIDo9IF9wZl92b2xpb3BzX3JhbmdlW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dChuLCByWzBdLCByWzFdKVxcbn1cXG5cXG4jIElPUFMgOiDjgrXjgqTjgrrmr5Tjga7otoXpgY5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAlZCBJT1BTIHBlciBHaUIgZm9yICVzIChTaXplICV2IEdpQiBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbbiwgcmF0aW8sIHZ0LCBzLCBzICogcmF0aW9dKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyYXRpbyA6PSBfcGZfdm9saW9wc19wZXJfZ2liW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIpKVxcblxcdG4gPiBzICogcmF0aW9cXG59XFxuXFxuIyBJb3BzIOOCkuWPl+OBkeS7mOOBkeOBquOBhOWei+OBqyBJb3BzIOOCkuaMh+WumlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMsIGlvMSwgaW8yKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJncDJcXFwiLCBcXFwic3QxXFxcIiwgXFxcInNjMVxcXCIsIFxcXCJzdGFuZGFyZFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG59XFxuXFxuIyBUaHJvdWdocHV0IOOBryBncDMg5bCC55SoXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMyk7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh2dClcXG5cXHR2dCAhPSBcXFwiZ3AzXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQg44Gu57W25a++44Os44Oz44K4XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAxMjUtMjAwMCBmb3IgZ3AzIHZvbHVtZXNcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dCh0LCAxMjUsIDIwMDApXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQgOiBJT1BTIOavlO+8iOacgOWkpyAwLjI1IE1pQi9zIHBlciBJT1BT77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUyAoJXYgSU9QUyBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbdCwgbiwgbiAvIDRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHR0ICogNCA+IG5cXG59XFxuXFxuIyBncDMg44GnIElvcHMg5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIDMwMDDvvInjga7jgajjgY3jga4gVGhyb3VnaHB1dCDmr5RcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyA3NTAsIHRoZSBtYXhpbXVtIGZvciB0aGUgZGVmYXVsdCAzMDAwIElPUFMgKDAuMjUgTWlCL3MgcGVyIElPUFMpOyBwcm92aXNpb24gSW9wcyBleHBsaWNpdGx5IG9yIGxvd2VyIHRoZSB0aHJvdWdocHV0XFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRub3QgX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHR0ID4gNzUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImlvMSBhbmQgaW8yIHZvbHVtZXMgcmVxdWlyZSB0aGUgSW9wcyBwcm9wZXJ0eVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgcGYtZWMyLXZvbHVtZS1pb3BzIHZhbGlkYXRlcyBJb3BzIHZhbHVlczsgdGhpcyBydWxlIGNvdmVycyB0aGVcXG4jIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50IChhYnNlbmNlKSB0aGF0IHRoZSBzY2hlbWEgY2Fubm90IGV4cHJlc3MuXFxuX3BmX2VjMnZpcl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlcyB2b2x1bWVzIHJlcXVpcmUgSW9wczsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVyIGlvcHMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yICVzIHZvbHVtZXMuXFxcXFxcXCJcXFwiLCBbdnQsIHZ0XSksXFxuXFx0XFxcIlNldCBJb3BzIChpbzE6IDEwMC02NDAwMCwgaW8yOiAxMDAtMjU2MDAwKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiaW8xXFxcIiwgXFxcImlvMlxcXCJ9XFxuXFx0X3BmX2VjMnZpcl9hYnNlbnQobmFtZSwgXFxcIklvcHNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUta21zLWVuY3J5cHRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLbXNLZXlJZCBvbiBhIHZvbHVtZSByZXF1aXJlcyBFbmNyeXB0ZWQgdG8gYmUgdHJ1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2a2VfYmFkKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRW5jcnlwdGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfZWMydmtlX2JhZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuY3J5cHRlZFxcXCIpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWttcy1lbmNyeXB0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkttc0tleUlkXFxcIixcXG5cXHRcXFwiS21zS2V5SWQgaXMgc2V0IGJ1dCBFbmNyeXB0ZWQgaXMgbm90IHRydWU7IEVDMiByZWplY3RzIHRoZSB2b2x1bWUgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXIgW0ttc0tleUlkXSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIEVuY3J5cHRlZCB0byBiZSBzZXQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgRW5jcnlwdGVkOiB0cnVlIGFsb25nc2lkZSBLbXNLZXlJZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS21zS2V5SWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0X3BmX2VjMnZrZV9iYWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLXNpemUtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQlMgdm9sdW1lIHNpemUgbXVzdCBtZWV0IHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtIChpbzEvaW8yIDQgR2lCLCBzdDEvc2MxIDEyNSBHaUIpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IG1pbmltdW1zOiB0aGUgaGlzdG9yaWNhbCAxNjM4NCBHaUIgbWF4aW11bSBubyBsb25nZXIgaG9sZHNcXG4jIChhIDE3MDAwIEdpQiBncDMgZGVwbG95ZWQgY2xlYW4gb24gMjAyNi0wOS0wMykuXFxuX3BmX2VjMnZzbV9taW4gOj0ge1xcXCJpbzFcXFwiOiA0LCBcXFwiaW8yXFxcIjogNCwgXFxcInN0MVxcXCI6IDEyNSwgXFxcInNjMVxcXCI6IDEyNX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtc2l6ZS1taW5pbXVtXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplICV2IEdpQiBpcyBiZWxvdyB0aGUgJXYgR2lCIG1pbmltdW0gZm9yICVzIHZvbHVtZXMgKFxcXFxcXFwiJXMgdm9sdW1lcyBtdXN0IGJlIGF0IGxlYXN0ICV2IEdpQiBpbiBzaXplLlxcXFxcXFwiKVxcXCIsIFtzLCBtbiwgdnQsIHZ0LCBtbl0pLFxcblxcdFxcXCJSYWlzZSBTaXplIHRvIHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0bW4gOj0gX3BmX2VjMnZzbV9taW5bdnRdXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaXplXFxcIikpXFxuXFx0cyA8IG1uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVlBDIElQdjQgQ0lEUiBibG9jayBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSB2YWxpZGF0ZXMgc3VibmV0IGNvbnRhaW5tZW50IChFMzA1OSkgYW5kIG92ZXJsYXAgKEUzMDYwKVxcbiMgYnV0IGFjY2VwdHMgYW55IFZQQyBuZXRtYXNrOyBFQzIgcmVqZWN0cyBhbnl0aGluZyBvdXRzaWRlIC8xNi4uLzI4LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVlBDIENJRFIgYmxvY2sgJyVzJyBoYXMgbmV0bWFzayAvJXY7IEVDMiBvbmx5IGFjY2VwdHMgLzE2IHRocm91Z2ggLzI4IChcXFxcXFxcIlRoZSBDSURSICclcycgaXMgaW52YWxpZC5cXFxcXFxcIilcXFwiLCBbYywgcCwgY10pLFxcblxcdFxcXCJVc2UgYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDXFxcIilcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHRwIDo9IHRvX251bWJlcihzcGxpdChjLCBcXFwiL1xcXCIpWzFdKVxcblxcdF9wZl9lYzJ2Y3Nfb3V0KHApXFxufVxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPCAxNlxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPiAyOFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtZ2F0ZXdheS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdhdGV3YXkgVlBDIGVuZHBvaW50cyBvbmx5IGV4aXN0IGZvciBTMyBhbmQgRHluYW1vREJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVnBjRW5kcG9pbnRUeXBlIGRlZmF1bHRzIHRvIEdhdGV3YXkgKG1lYXN1cmVkOiBhIHR5cGUtbGVzcyBlbmRwb2ludFxcbiMgZmFpbHMgd2l0aCBcXFwiRW5kcG9pbnQgdHlwZSAoR2F0ZXdheSkgLi4uXFxcIiBtZXNzYWdlcykuXFxuX3BmX2VjMnZnc19nYXRld2F5KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjRW5kcG9pbnRUeXBlXFxcIiwgXFxcIkdhdGV3YXlcXFwiKSA9PSBcXFwiR2F0ZXdheVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1nYXRld2F5LXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJPbmx5IFMzIGFuZCBEeW5hbW9EQiBvZmZlciBHYXRld2F5IGVuZHBvaW50czsgXFxcXFxcXCIlc1xcXFxcXFwiIGZhaWxzIHdpdGggXFxcXFxcXCJFbmRwb2ludCB0eXBlIChHYXRld2F5KSBkb2VzIG5vdCBtYXRjaCBhdmFpbGFibGUgc2VydmljZSB0eXBlc1xcXFxcXFwiXFxcIiwgW2NvbmNhdChcXFwiLlxcXCIsIHBhcnRzKV0pLFxcblxcdFxcXCJVc2UgY29tLmFtYXpvbmF3cy48cmVnaW9uPi5zMyBvciAuZHluYW1vZGIsIG9yIHN3aXRjaCBWcGNFbmRwb2ludFR5cGUgdG8gSW50ZXJmYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcHJpdmF0ZWxpbmsvZ2F0ZXdheS1lbmRwb2ludHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0X3BmX2VjMnZnc19nYXRld2F5KG5hbWUpXFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0bm90IHBhcnRzWzNdIGluIHtcXFwiczNcXFwiLCBcXFwiZHluYW1vZGJcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGNlLXNlcnZpY2UtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlZQQyBlbmRwb2ludCBzZXJ2aWNlIG5hbWVzIG11c3QgdXNlIHRoZSBkZXBsb3kgcmVnaW9uIHVubGVzcyBTZXJ2aWNlUmVnaW9uIGlzIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZzcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3ByaXZhdGVsaW5rL3ByaXZhdGVsaW5rLWFjY2Vzcy1hd3Mtc2VydmljZXMuaHRtbFxcXCJcXG5cXG4jIE9ubHkgY29tLmFtYXpvbmF3cy48cmVnaW9uPi48c2VydmljZT4gbmFtZXMgd2hlcmUgdGhlIHRoaXJkIHNlZ21lbnQgaXNcXG4jIHJlZ2lvbi1zaGFwZWQ7IG5hbWVzIGxpa2UgY29tLmFtYXpvbmF3cy5zMy1nbG9iYWwuYWNjZXNzcG9pbnQgc3RheSBvdXQuXFxuX3BmX2VjMnZzcl9wYXJ0cyhuYW1lKSA6PSBwYXJ0cyBpZiB7XFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0cmVnZXgubWF0Y2goYF5bYS16XXsyfSgtW2Etel0rKSstWzAtOV0rJGAsIHBhcnRzWzJdKVxcbn1cXG5cXG5fcGZfZWMydnNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1zZXJ2aWNlLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkVuZHBvaW50IHNlcnZpY2UgJyVzJyBuYW1lcyByZWdpb24gJXMgYnV0IHRoaXMgc3RhY2sgZGVwbG95cyB0byAlczsgd2l0aG91dCBTZXJ2aWNlUmVnaW9uIHRoZSBsb29rdXAgaXMgcmVnaW9uYWwgYW5kIHRoZSBjcmVhdGUgZmFpbHNcXFwiLCBbY29uY2F0KFxcXCIuXFxcIiwgcGFydHMpLCBwYXJ0c1syXSwgcmVnaW9uXSksXFxuXFx0XFxcIlVzZSBjb20uYW1hem9uYXdzLjxkZXBsb3ktcmVnaW9uPi48c2VydmljZT4sIG9yIHNldCBTZXJ2aWNlUmVnaW9uIGZvciBjcm9zcy1yZWdpb24gUHJpdmF0ZUxpbmtcXFwiLFxcblxcdF9wZl9lYzJ2c3JfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHBhcnRzIDo9IF9wZl9lYzJ2c3JfcGFydHMobmFtZSlcXG5cXHRwYXJ0c1syXSAhPSByZWdpb25cXG5cXHRfcGZfZWMydnNyX2Fic2VudChuYW1lLCBcXFwiU2VydmljZVJlZ2lvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0SWRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEdhdGV3YXkgZW5kcG9pbnRzIChhbmQgUm91dGVUYWJsZUlkcyBvbmx5IG9uIEdhdGV3YXkpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydnRjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLXZwY2VuZHBvaW50Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMnZ0Y190eXBlKG5hbWUpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0VuZHBvaW50VHlwZVxcXCIsIFxcXCJHYXRld2F5XFxcIilcXG59XFxuXFxuX3BmX2VjMnZ0Y19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldElkc1xcXCIsXFxuXFx0XFxcIkEgR2F0ZXdheSBlbmRwb2ludCBjYW5ub3QgdGFrZSBTdWJuZXRJZHMgKFxcXFxcXFwiU3VibmV0IElEcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIEludGVyZmFjZSBhbmQgR2F0ZXdheUxvYWRCYWxhbmNlciB0eXBlIFZQQyBFbmRwb2ludHMuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFN1Ym5ldElkcywgb3Igc2V0IFZwY0VuZHBvaW50VHlwZTogSW50ZXJmYWNlXFxcIixcXG5cXHRfcGZfZWMydnRjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRfcGZfZWMydnRjX3R5cGUobmFtZSkgPT0gXFxcIkdhdGV3YXlcXFwiXFxuXFx0X3BmX2VjMnZ0Y19oYXMobmFtZSwgXFxcIlN1Ym5ldElkc1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlVGFibGVJZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgJXMgZW5kcG9pbnQgY2Fubm90IHRha2UgUm91dGVUYWJsZUlkczsgb25seSBHYXRld2F5IGVuZHBvaW50cyBhdHRhY2ggdG8gcm91dGUgdGFibGVzXFxcIiwgW3RdKSxcXG5cXHRcXFwiUmVtb3ZlIFJvdXRlVGFibGVJZHMsIG9yIHNldCBWcGNFbmRwb2ludFR5cGU6IEdhdGV3YXlcXFwiLFxcblxcdF9wZl9lYzJ2dGNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHQgOj0gX3BmX2VjMnZ0Y190eXBlKG5hbWUpXFxuXFx0dCAhPSBcXFwiR2F0ZXdheVxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRfcGZfZWMydnRjX2hhcyhuYW1lLCBcXFwiUm91dGVUYWJsZUlkc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250YWluZXJEZWZpbml0aW9ucyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNvbnRhaW5lclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NjZGVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfZWNzY2RlX21zZyA6PSBcXFwiUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBuZWVkcyBhdCBsZWFzdCBvbmUgY29udGFpbmVyOyB0aGUgc2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIGxpc3QgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiXFxuXFxuX3BmX2Vjc2NkZV9maXggOj0gXFxcIkFkZCBhdCBsZWFzdCBvbmUgZW50cnkgdG8gQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIG1hcmtzIG5vIFRhc2tEZWZpbml0aW9uIHByb3BlcnR5IGFzIHJlcXVpcmVkLCBzbyBhblxcbiMgYWJzZW50IG9yIGVtcHR5IENvbnRhaW5lckRlZmluaXRpb25zIHNhaWxzIHRocm91Z2ggc2NoZW1hIHZhbGlkYXRpb24gYW5kXFxuIyBkaWVzIGF0IHJlZ2lzdHJhdGlvbi4gZmxhdHRlbl9saXN0IHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgYWJzZW50IGFuZFxcbiMgZW1wdHkgYWxpa2UsIHNvIGJvdGggYmxvY2tzIHJlYWQgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoaW5wdXQucmVzb3VyY2VzKVxcbiMgdG8gdGVsbCBhIGxpdGVyYWwgZW1wdHkgbGlzdCBmcm9tIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBzdWNoIGFzIEZuOjpJZi5cXG5fcGZfZWNzY2RlX3Byb3BzKG5hbWUpIDo9IHByb3BzIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb250YWluZXJEZWZpbml0aW9uc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHJhdylcXG5cXHRjb3VudChyYXcpID09IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1vdmVyLXRhc2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgTWVtb3J5IG11c3Qgbm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzaW5nbGUgY29udGFpbmVyJ3MgaGFyZCBNZW1vcnkgbGltaXQgY2Fubm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnkuXFxuIyBUYXNrIE1lbW9yeSBhcnJpdmVzIGFzIGEgc3RyaW5nIChcXFwiNTEyXFxcIik7IHRvX251bWJlciBjb3ZlcnMgYm90aCBzcGVsbGluZ3MgYW5kXFxuIyBtYWtlcyB0aGUgcnVsZSBza2lwIHdoZW4gZWl0aGVyIHNpZGUgaXMgdW5yZXNvbHZhYmxlIG9yIEdCLXN1ZmZpeGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnkgJXYgYWJvdmUgdGhlIHRhc2stbGV2ZWwgTWVtb3J5ICV2OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgJ21lbW9yeScgc2V0dGluZyBmb3IgY29udGFpbmVyICclcycgaXMgZ3JlYXRlciB0aGFuIGZvciB0aGUgdGFza1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBjbSwgdG0sIGNuYW1lXSksXFxuXFx0XFxcIkxvd2VyIHRoZSBjb250YWluZXIgTWVtb3J5IHRvIGF0IG1vc3QgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LCBvciByYWlzZSB0aGUgdGFzay1sZXZlbCBNZW1vcnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dG0gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIikpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0Y20gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVxcXCIsIG51bGwpKVxcblxcdGNtID4gdG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgbmVlZHMgTWVtb3J5IG9yIE1lbW9yeVJlc2VydmF0aW9uIHdoZW4gdGhlIHRhc2sgc2V0cyBubyBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NtZW1yZXFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBXaGVuIHRoZSB0YXNrIGRlZmluaXRpb24gaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5LCBldmVyeSBjb250YWluZXIgbXVzdCBzZXRcXG4jIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbi4gUHJvdmluZyB0cnVlIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZFxcbiMgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcyk6IHJlc29sdmUoKSBpcyB1bmRlZmluZWQgZm9yIGEgbWlzc2luZyBrZXkgYW5kIGZvclxcbiMgYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGFsaWtlLCBzbyBpdCBjYW5ub3QgdGVsbCBcXFwiYWJzZW50XFxcIiBmcm9tIFxcXCJSZWYgdG8gYVxcbiMgcGFyYW1ldGVyXFxcIi4gVGhlIGlzX29iamVjdCBndWFyZCBmYWlscyBjbG9zZWQgaWYgdGhhdCBpbnRlcm5hbCBzaGFwZSBjaGFuZ2VzLlxcbl9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTWVtb3J5XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIG5laXRoZXIgTWVtb3J5IG5vciBNZW1vcnlSZXNlcnZhdGlvbiBhbmQgdGhlIHRhc2sgaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJBdCBsZWFzdCBvbmUgb2YgJ21lbW9yeScgb3IgJ21lbW9yeVJlc2VydmF0aW9uJyBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2NuYW1lXSksXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSwgb3IgZ2l2ZSB0aGUgY29udGFpbmVyIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvblxcXCIsXFxuXFx0X3BmX2Vjc21lbXJlcV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc21lbXJlcV90YXNrX21lbW9yeV9hYnNlbnQobmFtZSlcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1lbW9yeVJlc2VydmF0aW9uIG11c3Qgbm90IGV4Y2VlZCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWVtb3J5UmVzZXJ2YXRpb24gaXMgYSBzb2Z0IGZsb29yIGFuZCBNZW1vcnkgYSBoYXJkIGNlaWxpbmc7IHRoZSBzZXJ2aWNlXFxuIyByZWplY3RzIGEgZmxvb3IgYWJvdmUgdGhlIGNlaWxpbmcuIHRvX251bWJlciBmYWlscyAoYW5kIHRoZSBydWxlIHNraXBzKSB3aGVuXFxuIyBlaXRoZXIgdmFsdWUgaXMgYWJzZW50IG9yIHVucmVzb2x2YWJsZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIE1lbW9yeVJlc2VydmF0aW9uICV2IGFib3ZlIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiJ21lbW9yeScgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJ21lbW9yeVJlc2VydmF0aW9uJ1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBtciwgbV0pLFxcblxcdFxcXCJMb3dlciBNZW1vcnlSZXNlcnZhdGlvbiB0byBhdCBtb3N0IE1lbW9yeSwgb3IgcmFpc2UgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRtciA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSlcXG5cXHRtciA+IG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWR1cGxpY2F0ZS1jb250YWluZXItbmFtZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmUgZGlhZ25vc3RpYyBwZXIgZHVwbGljYXRlZCBsYXRlciBvY2N1cnJlbmNlOyBvbmx5IGxpdGVyYWwgc3RyaW5nIG5hbWVzXFxuIyBjYW4gYmUgY29tcGFyZWQsIHNvIGEgUmVmLXZhbHVlZCBOYW1lIHNraXBzIGl0cyBwYWlycy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk5hbWVcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciBuYW1lICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblxcXFxcXFwiXFxcIiwgW25hXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgY29udGFpbmVyIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYSBkaXN0aW5jdCBOYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdG5hIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIk5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhuYSlcXG5cXHRuYSA9PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgbXVzdCBiZSAyMS0yMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZXBoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tZXBoZW1lcmFsc3RvcmFnZS5odG1sXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBjYXJyaWVzIG5vIG1pbmltdW0vbWF4aW11bSBmb3IgU2l6ZUluR2lCLCBzbyAyMS0yMDAgaXNcXG4jIGVuZm9yY2VkIG9ubHkgYXQgcmVnaXN0cmF0aW9uIHRpbWUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBiZWxvdyAyMTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRXBoZW1lcmFsU3RvcmFnZSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAyMVxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiVXNlIGEgc2l6ZSBiZXR3ZWVuIDIxIGFuZCAyMDAgR2lCLCBvciBkcm9wIEVwaGVtZXJhbFN0b3JhZ2UgdG8ga2VlcCB0aGUgZGVmYXVsdCAyMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzIDwgMjFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBhYm92ZSAyMDA7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbW9zdCAyMDBcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQlxcXCIsXFxuXFx0X3BmX2Vjc2VwaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIpKVxcblxcdHMgPiAyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdCBsZWFzdCBvbmUgY29udGFpbmVyIG11c3QgYmUgZXNzZW50aWFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVzc2VudGlhbCBkZWZhdWx0cyB0byB0cnVlLCBzbyB0aGUgcnVsZSBmaXJlcyBvbmx5IHdoZW4gZXZlcnkgY29udGFpbmVyIHNheXNcXG4jIEVzc2VudGlhbDogZmFsc2UgZXhwbGljaXRseS4gQSBjb250YWluZXIgd2hvc2UgRXNzZW50aWFsIGlzIHVucmVzb2x2YWJsZSAob3JcXG4jIGEgbm9uLWJvb2xlYW4pIGJyZWFrcyB0aGUgYGV2ZXJ5YCwgYW5kIHRoZSBydWxlIHNraXBzIOKAlCBhYnNlbmNlIG9mIGFuXFxuIyBlc3NlbnRpYWwgY29udGFpbmVyIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1lc3NlbnRpYWwtY29udGFpbmVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0XFxcIkV2ZXJ5IGNvbnRhaW5lciBzZXRzIEVzc2VudGlhbDogZmFsc2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIlRhc2sgZGVmaW5pdGlvbiBkb2Vzbid0IGhhdmUgYW55IGVzc2VudGlhbCBjb250YWluZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIk1hcmsgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciBFc3NlbnRpYWw6IHRydWUsIG9yIG9taXQgRXNzZW50aWFsIChpdCBkZWZhdWx0cyB0byB0cnVlKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0aXRlbXMgOj0gW2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGMgaW4gaXRlbXMge1xcblxcdFxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIkVzc2VudGlhbFxcXCIsIG51bGwpID09IGZhbHNlXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLW5ldHdvcmstbW9kZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGYXJnYXRlIHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyZSBOZXR3b3JrTW9kZSAnYXdzdnBjJ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc25tX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCNuZXR3b3JrX21vZGVcXFwiXFxuXFxuIyByZXNvbHZlKCkgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwidW5yZXNvbHZhYmxlXFxcIiAoYm90aCB1bmRlZmluZWQpLCBzbyB0cnVlXFxuIyBhYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQ7IGEgUmVmLXZhbHVlZCBOZXR3b3JrTW9kZVxcbiMgbm8gbG9uZ2VyIHRyaXBzIHRoZSBub3Qtc2V0IGJsb2NrLlxcbl9wZl9lY3NubV9hYnNlbnQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJOZXR3b3JrTW9kZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrTW9kZSBpcyAnJXMnIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCB1c2UgJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbm1dKSxcXG5cXHRcXFwiU2V0IE5ldHdvcmtNb2RlIHRvICdhd3N2cGMnXFxcIixcXG5cXHRfcGZfZWNzbm1fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHJjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdGlzX2FycmF5KHJjKVxcblxcdFxcXCJGQVJHQVRFXFxcIiBpbiByY1xcblxcdG5tIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cXG4jIE5ldHdvcmtNb2RlIOacquaMh+WumuOBp+OCgiBSZWdpc3RlclRhc2tEZWZpbml0aW9uIOOBr1xcbiMgXFxcIkZhcmdhdGUgb25seSBzdXBwb3J0cyBuZXR3b3JrIG1vZGUgJ2F3c3ZwYycuXFxcIiDjgaflpLHmlZfjgZnjgovvvIgyMDI2LTA5LTAxIOWunyBBUEkg56K66KqN77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRcXFwiTmV0d29ya01vZGUgaXMgbm90IHNldCwgYnV0IHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyaW5nIEZBUkdBVEUgY29tcGF0aWJpbGl0eSBtdXN0IHNldCBpdCB0byAnYXdzdnBjJzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRfcGZfZWNzbm1fYWJzZW50KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZBUkdBVEUgY29tcGF0aWJpbGl0eSByZXF1aXJlcyB0YXNrLWxldmVsIENwdSBhbmQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZmFyZ2NtX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwNDcgY2hlY2tzIHRoZSBDcHUvTWVtb3J5IHBhaXJpbmcgb25seSB3aGVuIGJvdGggYXJlIHByZXNlbnQ7XFxuIyBsZWF2aW5nIG9uZSBvdXQgZW50aXJlbHkgaXMgY2F1Z2h0IGJ5IG5vdGhpbmcgYmVmb3JlIHJlZ2lzdHJhdGlvbi4gVHJ1ZVxcbiMgYWJzZW5jZSBuZWVkcyB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgcGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcXG4jIGZvciB0aGUgaWRpb20pLlxcbl9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSByYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdHJjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS10YXNrLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNwdVxcXCIsXFxuXFx0XFxcIlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzIGluY2x1ZGVzIEZBUkdBVEUgYnV0IHRoZSB0YXNrLWxldmVsIENwdSBpcyBtaXNzaW5nOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlcXVpcmVzIHRoYXQgJ2NwdScgYmUgZGVmaW5lZCBhdCB0aGUgdGFzayBsZXZlbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IHRhc2stbGV2ZWwgQ3B1IChhbmQgTWVtb3J5KSB0byBvbmUgb2YgdGhlIHN1cHBvcnRlZCBGYXJnYXRlIGNvbWJpbmF0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2ZhcmdjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9mYXJnYXRlKG5hbWUpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwgXFxcIkNwdVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZW1vcnlcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBNZW1vcnkgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdtZW1vcnknIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSAoYW5kIENwdSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJNZW1vcnlcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFMQiBpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0MDAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPCAxXFxuXFxuX3BmX2lkbGVfdGltZW91dF9vdXQobikgaWYgbiA+IDQwMDBcXG5cXG5fcGZfbm9uX2FsYihuYW1lKSBpZiB7XFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKVxcblxcdHQgIT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIGlzICV2IGJ1dCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMSBhbmQgNDAwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlcnMuaHRtbCNjb25uZWN0aW9uLWlkbGUtdGltZW91dFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRub3QgX3BmX25vbl9hbGIobmFtZSlcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlckF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2lkbGVfdGltZW91dF9vdXQobnVtKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPiAzNjAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzYwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI2RlcmVnaXN0cmF0aW9uLWRlbGF5XFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzXFxcIlxcblxcdG51bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhdHRyLCBcXFwiVmFsdWVcXFwiLCBudWxsKSlcXG5cXHRfcGZfZGVyZWdfZGVsYXlfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1zbG93LXN0YXJ0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIHNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBtdXN0IGJlIDAgb3IgYmV0d2VlbiAzMCBhbmQgOTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIHtcXG5cXHRuID4gMFxcblxcdG4gPCAzMFxcbn1cXG5cXG5fcGZfc2xvd19zdGFydF9vdXQobikgaWYgbiA+IDkwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSAwIChkaXNhYmxlZCkgb3IgYmV0d2VlbiAzMCBhbmQgOTAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgdG8gMCBvciBhIHZhbHVlIGJldHdlZW4gMzAgYW5kIDkwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI3Nsb3ctc3RhcnQtbW9kZVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nsb3dfc3RhcnRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklucHV0VGVtcGxhdGUgcGxhY2Vob2xkZXJzIG11c3QgYmUgZGVjbGFyZWQgaW4gSW5wdXRQYXRoc01hcFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IDxwbGFjZWhvbGRlcj4gaW4gSW5wdXRUZW1wbGF0ZSBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXAsXFxuIyBleGNlcHQgdGhlIGF3cy5ldmVudHMuKiBwcmVkZWZpbmVkIHZhcmlhYmxlcy4gQW4gSW5wdXRQYXRoc01hcCB0aGF0IGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIChub3JtYWxpemVkIHdpdGggX18tcHJlZml4ZWQgbWFya2VyIGtleXMpIG1ha2VzIHRoZVxcbiMgZGVjbGFyZWQgc2V0IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbCkgOj0ge3N1YnN0cmluZyhmLCAxLCBjb3VudChmKSAtIDIpIHwgc29tZSBmIGluIHJlZ2V4LmZpbmRfbihgPChbQS1aYS16MC05Xy4tXSspPmAsIHRtcGwsIC0xKX1cXG5cXG5fcGZfZXZpdHBfcGxhaW5fbWFwKHBtKSBpZiB7XFxuXFx0aXNfb2JqZWN0KHBtKVxcblxcdGV2ZXJ5IGssIF8gaW4gcG0ge1xcblxcdFxcdG5vdCBzdGFydHN3aXRoKGssIFxcXCJfX1xcXCIpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1pbnB1dC10cmFuc2Zvcm1lci1wbGFjZWhvbGRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0cy4lZC5JbnB1dFRyYW5zZm9ybWVyLklucHV0VGVtcGxhdGVcXFwiLCBbdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIklucHV0VGVtcGxhdGUgdXNlcyA8JXM+IGJ1dCBJbnB1dFBhdGhzTWFwIGRvZXMgbm90IGRlY2xhcmUgaXQ7IFB1dFRhcmdldHMgZmFpbHMgd2l0aCBcXFxcXFxcIklucHV0VGVtcGxhdGUgZm9yIHRhcmdldCAlcyBjb250YWlucyBpbnZhbGlkIHBsYWNlaG9sZGVyICVzXFxcXFxcXCJcXFwiLCBbcCwgdGlkLCBwXSksXFxuXFx0c3ByaW50ZihcXFwiQWRkICclcycgdG8gSW5wdXRQYXRoc01hcCwgb3IgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlciBmcm9tIHRoZSB0ZW1wbGF0ZVxcXCIsIFtwXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLXRyYW5zZm9ybS10YXJnZXQtaW5wdXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldHNcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdGl0IDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIklucHV0VHJhbnNmb3JtZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChpdClcXG5cXHR0bXBsIDo9IG9iamVjdC5nZXQoaXQsIFxcXCJJbnB1dFRlbXBsYXRlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodG1wbClcXG5cXHRwbSA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRQYXRoc01hcFxcXCIsIHt9KVxcblxcdF9wZl9ldml0cF9wbGFpbl9tYXAocG0pXFxuXFx0c29tZSBwIGluIF9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbClcXG5cXHRub3Qgc3RhcnRzd2l0aChwLCBcXFwiYXdzLmV2ZW50cy5cXFwiKVxcblxcdG5vdCBwbVtwXVxcblxcdHRpZCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJZFxcXCIsIFxcXCI8dGFyZ2V0PlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gZW1wdHkgRXZlbnRQYXR0ZXJuIGNvdW50cyBhcyBubyBwYXR0ZXJuIGF0IGFsbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUncyBGMzA1OCBmaXJlcyB3aGVuIHRoZSBFdmVudFBhdHRlcm4gS0VZIGlzIGFic2VudCwgYnV0IGFuIGVtcHR5XFxuIyBvYmplY3QgcGFzc2VzIHRoZSBzY2hlbWEgYW5kIHRoZSBoYW5kbGVyIHRoZW4gdHJlYXRzIGl0IGFzIG5vIHBhdHRlcm4gYXRcXG4jIGFsbC4gRmlyZXMgb25seSB3aGVuIFNjaGVkdWxlRXhwcmVzc2lvbiBpcyBhbHNvIGxpdGVyYWxseSBhYnNlbnQg4oCUIHRoZVxcbiMgYmVuY2gtdmVyaWZpZWQgc2hhcGUgKGFic2VuY2UgcHJvdmVuIHZpYSBpbnB1dC5yZXNvdXJjZXMsIHNlZSBBR0VOVFMubWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIsXFxuXFx0XFxcIkV2ZW50UGF0dGVybiBpcyBhbiBlbXB0eSBvYmplY3QsIHdoaWNoIHRoZSBoYW5kbGVyIHRyZWF0cyBhcyBubyBwYXR0ZXJuOyBQdXRSdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXJhbWV0ZXIocykgRXZlbnRQYXR0ZXJuIG9yIFNjaGVkdWxlRXhwcmVzc2lvbiBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiR2l2ZSBFdmVudFBhdHRlcm4gYXQgbGVhc3Qgb25lIG1hdGNoZXIgKGUuZy4gc291cmNlKSwgb3IgdXNlIFNjaGVkdWxlRXhwcmVzc2lvbiBpbnN0ZWFkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdGNvdW50KGVwKSA9PSAwXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlbnQgcGF0dGVybiB2YWx1ZXMgbXVzdCBiZSBhcnJheXMgb3Igb2JqZWN0cywgbm90IHNjYWxhcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX251bWJlcih2KVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfYm9vbGVhbih2KVxcblxcbiMgRXZlcnkgbWF0Y2hlciBpbiBhbiBldmVudCBwYXR0ZXJuIG11c3QgYmUgYW4gYXJyYXkgKG9yIGFuIG9iamVjdCBob2xkaW5nXFxuIyBvcGVyYXRvcnMpOyBhIGJhcmUgc2NhbGFyIGlzIHJlamVjdGVkIHBlciBrZXkuIE9ubHkgdGhlIHRvcCBsZXZlbCBpc1xcbiMgY2hlY2tlZCDigJQgdGhhdCBpcyB0aGUgYmVuY2gtdmVyaWZpZWQgc2NvcGUsIGFuZCBpdCBkb2RnZXMgb3BlcmF0b3Igb2JqZWN0c1xcbiMgbGlrZSB7XFxcInByZWZpeFxcXCI6IFxcXCIuLi5cXFwifSB0aGF0IGxlZ2FsbHkgY2Fycnkgc2NhbGFycyBkZWVwZXIgZG93bi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLXNjYWxhci12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm4uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkV2ZW50UGF0dGVybiBrZXkgJyVzJyBob2xkcyBhIGJhcmUgc2NhbGFyOyBQdXRSdWxlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkV2ZW50IHBhdHRlcm4gaXMgbm90IHZhbGlkLiBSZWFzb246IFxcXFxcXFxcXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlcXFxcXFxcIlxcXCIsIFtrLCBrXSksXFxuXFx0c3ByaW50ZihcXFwiV3JhcCB0aGUgdmFsdWUgaW4gYW4gYXJyYXk6IFxcXFxcXFwiJXNcXFxcXFxcIjogWy4uLl1cXFwiLCBba10pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi1ldmVudC1wYXR0ZXJucy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFdmVudHM6OlJ1bGVcXFwiKVxcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuXFxcIilcXG5cXHRpc19vYmplY3QoZXApXFxuXFx0c29tZSBrLCB2IGluIGVwXFxuXFx0X3BmX2V2cHN2X3NjYWxhcih2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWZpcmVob3NlLWRmY2MtcmVxdWlyZWQtY29uZmlnc1wiLFxuICAgIFwic2VydmljZVwiOiBcImZpcmVob3NlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsZWQgZm9ybWF0IGNvbnZlcnNpb24gbmVlZHMgaW5wdXQsIG91dHB1dCwgYW5kIHNjaGVtYSBjb25maWdzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB0aHJlZSBzdWItY29uZmlndXJhdGlvbnMgYXJlIHVuY29uZGl0aW9uYWxseSByZXF1aXJlZCBvbmNlIEVuYWJsZWRcXG4jIGlzIHRydWU7IHRoZSBzZXJ2aWNlIHJlamVjdHMgZWFjaCBhYnNlbmNlIGluIHR1cm4uIFJlYWQgZnJvbSB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2ZoZGZjY19vdXRlcihuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbl9wZl9maGRmY2NfY29uZihuYW1lKSA6PSBjIGlmIHtcXG5cXHR4IDo9IF9wZl9maGRmY2Nfb3V0ZXIobmFtZSlcXG5cXHRjIDo9IG9iamVjdC5nZXQoeCwgXFxcIkRhdGFGb3JtYXRDb252ZXJzaW9uQ29uZmlndXJhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWRmY2MtcmVxdWlyZWQtY29uZmlnc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkRhdGFGb3JtYXRDb252ZXJzaW9uQ29uZmlndXJhdGlvbi4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiRGF0YSBmb3JtYXQgY29udmVyc2lvbiBpcyBlbmFibGVkIHdpdGhvdXQgJXM7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCIlcyBtdXN0IG5vdCBiZSBudWxsXFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdFxcXCJTZXQgSW5wdXRGb3JtYXRDb25maWd1cmF0aW9uLCBPdXRwdXRGb3JtYXRDb25maWd1cmF0aW9uLCBhbmQgU2NoZW1hQ29uZmlndXJhdGlvbiB0b2dldGhlclxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMta2luZXNpc2ZpcmVob3NlLWRlbGl2ZXJ5c3RyZWFtLWRhdGFmb3JtYXRjb252ZXJzaW9uY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRjIDo9IF9wZl9maGRmY2NfY29uZihuYW1lKVxcblxcdGNvZXJjZV90b19ib29sKG9iamVjdC5nZXQoYywgXFxcIkVuYWJsZWRcXFwiLCBmYWxzZSkpID09IHRydWVcXG5cXHRzb21lIGsgaW4ge1xcXCJJbnB1dEZvcm1hdENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiT3V0cHV0Rm9ybWF0Q29uZmlndXJhdGlvblxcXCIsIFxcXCJTY2hlbWFDb25maWd1cmF0aW9uXFxcIn1cXG5cXHRvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1idWZmZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEeW5hbWljIHBhcnRpdGlvbmluZyBuZWVkcyBhIDY0IE1CIGJ1ZmZlciBmbG9vclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIGZsb29yIGlzIDE7IHRoZSA2NCBmbG9vciBvbmx5IGFwcGxpZXMgd2l0aCBkeW5hbWljXFxuIyBwYXJ0aXRpb25pbmcgb24gLSBhIGNvbmRpdGlvbmFsIGJvdW5kIG5vIHNjaGVtYSBsYXllciBjYW4gZXhwcmVzcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWR5bmFtaWMtcGFydGl0aW9uaW5nLWJ1ZmZlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5CdWZmZXJpbmdIaW50cy5TaXplSW5NQnNcXFwiLFxcblxcdHNwcmludGYoXFxcIlNpemVJbk1CcyAldiB3aXRoIGR5bmFtaWMgcGFydGl0aW9uaW5nOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzIG11c3QgYmUgYXQgbGVhc3QgNjQgd2hlbiBEeW5hbWljIFBhcnRpdGlvbmluZyBpcyBlbmFibGVkLlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiUmFpc2UgU2l6ZUluTUJzIHRvIGF0IGxlYXN0IDY0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0tZHluYW1pY3BhcnRpdGlvbmluZ2NvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkR5bmFtaWNQYXJ0aXRpb25pbmdDb25maWd1cmF0aW9uLkVuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5CdWZmZXJpbmdIaW50cy5TaXplSW5NQnNcXFwiKSlcXG5cXHRzIDwgNjRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1wcmVmaXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEeW5hbWljIHBhcnRpdGlvbmluZyBuZWVkcyBwYXJ0aXRpb24gbmFtZXNwYWNlcyBpbiB0aGUgcHJlZml4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhcnRpdGlvbmVkIGRlbGl2ZXJ5IGhhcyBub3doZXJlIHRvIHB1dCB0aGUga2V5cyB1bmxlc3MgdGhlIHByZWZpeFxcbiMgaW50ZXJwb2xhdGVzIHRoZW0gdmlhICF7cGFydGl0aW9uS2V5RnJvbS4uLn0gbmFtZXNwYWNlcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWR5bmFtaWMtcGFydGl0aW9uaW5nLXByZWZpeFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5QcmVmaXhcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZpeCAnJXMnIGhhcyBubyBwYXJ0aXRpb24gbmFtZXNwYWNlOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUzMgUHJlZml4IHNob3VsZCBjb250YWluIER5bmFtaWMgUGFydGl0aW9uaW5nIG5hbWVzcGFjZXMgd2hlbiBEeW5hbWljIFBhcnRpdGlvbmluZyBpcyBlbmFibGVkXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJJbnRlcnBvbGF0ZSBhdCBsZWFzdCBvbmUgIXtwYXJ0aXRpb25LZXlGcm9tUXVlcnk6Li4ufSBvciAhe3BhcnRpdGlvbktleUZyb21MYW1iZGE6Li4ufSBpbnRvIHRoZSBwcmVmaXhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZmlyZWhvc2UvbGF0ZXN0L2Rldi9keW5hbWljLXBhcnRpdGlvbmluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uRHluYW1pY1BhcnRpdGlvbmluZ0NvbmZpZ3VyYXRpb24uRW5hYmxlZFxcXCIpKSA9PSB0cnVlXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocClcXG5cXHRub3QgY29udGFpbnMocCwgXFxcIiF7cGFydGl0aW9uS2V5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1raW5lc2lzLXNvdXJjZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLaW5lc2lzU3RyZWFtQXNTb3VyY2Ugc3RyZWFtcyBuZWVkIEtpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhpcyBkaXJlY3Rpb24gaXMgYSBkZXBsb3kgZmFpbHVyZSAtIERpcmVjdFB1dCB3aXRoIGEgKHNpbGVudGx5XFxuIyBpZ25vcmVkKSBzb3VyY2UgY29uZmlndXJhdGlvbiBkZXBsb3lzIGZpbmUgKGJlbmNoIGYwNikuIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maGtzY19taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2Uta2luZXNpcy1zb3VyY2UtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU291cmNlQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkRlbGl2ZXJ5U3RyZWFtVHlwZSBpcyBLaW5lc2lzU3RyZWFtQXNTb3VyY2UgYnV0IG5vIHNvdXJjZSBjb25maWd1cmF0aW9uIGlzIHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIktpbmVzaXNTb3VyY2VTdHJlYW1Db25maWcgaXMgbWFuZGF0b3J5IGZvciBLaW5lc2lzU3RyZWFtQXNTb3VyY2Ugc3RyZWFtIHR5cGUuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgc3RyZWFtIEFSTiBhbmQgcm9sZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlbGl2ZXJ5U3RyZWFtVHlwZVxcXCIpID09IFxcXCJLaW5lc2lzU3RyZWFtQXNTb3VyY2VcXFwiXFxuXFx0X3BmX2Zoa3NjX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1vbmUtZGVzdGluYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRlbGl2ZXJ5IHN0cmVhbSB0YWtlcyBleGFjdGx5IG9uZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggZGlyZWN0aW9ucyBkZXBsb3ktdmVyaWZpZWQ6IG5vbmUgc2V0LCBhbmQgdHdvIHNldC4gS2V5IHByZXNlbmNlIGlzXFxuIyByZWFkIGZyb20gdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2Zob2RfZGVzdHMgOj0ge1xcblxcdFxcXCJTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJSZWRzaGlmdERlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkVsYXN0aWNzZWFyY2hEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBbWF6b25vcGVuc2VhcmNoc2VydmljZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkFtYXpvbk9wZW5TZWFyY2hTZXJ2ZXJsZXNzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiU3BsdW5rRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSHR0cEVuZHBvaW50RGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiU25vd2ZsYWtlRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSWNlYmVyZ0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2Utb25lLWRlc3RpbmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgZGVzdGluYXRpb24gY29uZmlndXJhdGlvbnMgYXJlIHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgc3VwcG9ydGVkIGZvciBhIEZpcmVob3NlXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgKkRlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRuIDo9IGNvdW50KFtrIHwgc29tZSBrIGluIF9wZl9maG9kX2Rlc3RzOyBvYmplY3QuZ2V0KHByb3BzLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1zMy1iYWNrdXAtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5hYmxpbmcgUzMgYmFja3VwIG5lZWRzIFMzQmFja3VwQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCYWNrdXAgbW9kZSBwb2ludHMgZGVsaXZlcmllcyBhdCBhIHNlY29uZCBidWNrZXQgdGhhdCBtdXN0IGJlXFxuIyBjb25maWd1cmVkLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgRXh0ZW5kZWRTMyBkZXN0aW5hdGlvbi4gQWJzZW5jZSBpc1xcbiMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2Zoc2JjX291dGVyKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1zMy1iYWNrdXAtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLlMzQmFja3VwQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlMzQmFja3VwTW9kZSBpcyBFbmFibGVkIGJ1dCBTM0JhY2t1cENvbmZpZ3VyYXRpb24gaXMgbm90IHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIGJhY2t1cCBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIHdoZW4gZW5hYmxpbmcgUzMgYmFja3VwLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFMzQmFja3VwQ29uZmlndXJhdGlvbiAoYnVja2V0IGFuZCByb2xlKSwgb3IgZHJvcCBTM0JhY2t1cE1vZGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS1leHRlbmRlZHMzZGVzdGluYXRpb25jb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5TM0JhY2t1cE1vZGVcXFwiKSA9PSBcXFwiRW5hYmxlZFxcXCJcXG5cXHR4IDo9IF9wZl9maHNiY19vdXRlcihuYW1lKVxcblxcdG9iamVjdC5nZXQoeCwgXFxcIlMzQmFja3VwQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taWRlbnRpdHktcG9saWN5LW5vLXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJZGVudGl0eSBwb2xpY2llcyBjYW5ub3QgY2FycnkgYSBQcmluY2lwYWwgZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIElkZW50aXR5IHBvbGljaWVzIGF0dGFjaCB0byB0aGVpciBwcmluY2lwYWwgaW1wbGljaXRseTsgdGhlIGZpZWxkXFxuIyBiZWxvbmdzIHRvIHJlc291cmNlLWJhc2VkIHBvbGljaWVzLlxcbl9wZl9paW5wX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWlucF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWlucF9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWlucF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWlkZW50aXR5LXBvbGljeS1uby1wcmluY2lwYWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5QcmluY2lwYWxcXFwiLCBbcGF0aCwgaV0pLFxcblxcdFxcXCJJZGVudGl0eSBwb2xpY3kgc3RhdGVtZW50IGhhcyBhIFByaW5jaXBhbCBmaWVsZDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUG9saWN5IGRvY3VtZW50IHNob3VsZCBub3Qgc3BlY2lmeSBhIHByaW5jaXBhbC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcmluY2lwYWwgKGlkZW50aXR5IHBvbGljaWVzIGFwcGx5IHRvIHRoZSBpZGVudGl0eSB0aGV5IGF0dGFjaCB0bylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2lpbnBfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9paW5wX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1pbmxpbmUtcG9saWN5LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5saW5lIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgcGVyIGlkZW50aXR5IChyb2xlIDEwMjQwIC8gZ3JvdXAgNTEyMCAvIHVzZXIgMjA0OCBjaGFyYWN0ZXJzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6Um9sZVBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaW5saW5lX3BvbGljeV9saW1pdHMgOj0ge1xcblxcdFxcXCJBV1M6OklBTTo6UG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlUG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyUG9saWN5XFxcIjogMjA0OCxcXG5cXHRcXFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XFxcIjogNTEyMCxcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgaW5saW5lIHBvbGljeSBsaW1pdCBmb3IgJXMgaXMgJWQgKHJvbGU6IDEwMjQwLCBncm91cDogNTEyMCwgdXNlcjogMjA0OClcXFwiLCBbc2l6ZSwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIk1vdmUgc3RhdGVtZW50cyBpbnRvIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiB0aGUgZG9jdW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBsaW1pdCBpbiBfcGZfaW5saW5lX3BvbGljeV9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0ZG9jIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChkb2MpXFxuXFx0c2l6ZSA6PSBjb3VudChqc29uLm1hcnNoYWwoZG9jKSlcXG5cXHRzaXplID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taW5zdGFuY2UtcHJvZmlsZS1zaW5nbGUtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBpbnN0YW5jZSBwcm9maWxlIGhvbGRzIGV4YWN0bHkgb25lIHJvbGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBcXFwicXVvdGFcXFwiIGlzIGEgaGFyZCBsaW1pdCBvZiBvbmUgcm9sZTsgdGhlIHNjaGVtYSBoYXMgbm8gbWF4SXRlbXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0taW5zdGFuY2UtcHJvZmlsZS1zaW5nbGUtcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm9sZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIHJvbGVzIG9uIG9uZSBpbnN0YW5jZSBwcm9maWxlOyB0aGUgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJDYW5ub3QgZXhjZWVkIHF1b3RhIGZvciBJbnN0YW5jZVNlc3Npb25zUGVySW5zdGFuY2VQcm9maWxlOiAxXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIHJvbGUgcGVyIGluc3RhbmNlIHByb2ZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1pYW0taW5zdGFuY2Vwcm9maWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlXFxcIilcXG5cXHRuIDo9IGNvdW50KGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Sb2xlc1xcXCIpKVxcblxcdG4gPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LWNvdW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hbmFnZWQgcG9saWNpZXMgcGVyIGlkZW50aXR5IGFyZSBjYXBwZWQgKGhhcmQgbWF4aW11bXMgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMg44OP44O844OJ5LiK6ZmQ77yIU2VydmljZSBRdW90YXMg44Gu44CMTWF4aW11bSBxdW90YeOAjT0g44Gd44KM5Lul5LiK5byV44GN5LiK44GS5LiN5Y+v6IO944Gq5YCk77yJOlxcbiMgICByb2xlIDI1IC8gdXNlciAyMCAvIGdyb3VwIDEw77yIZ3JvdXAg44GvIGFkanVzdGFibGU6IGZhbHNl44CB5a6f5ris44Gn44KC56K66KqN77yJ44CCXFxuIyDjg4fjg5Xjgqnjg6vjg4jvvIhyb2xlIDIwIC8gdXNlciAxMCAvIGdyb3VwIDEw77yJ6LaF44Gv44Ki44Kr44Km44Oz44OI44Gu44Kv44Kp44O844K/5byV44GN5LiK44GS5qyh56ys44GnXFxuIyDmiJDlip/jgZflvpfjgovjgZ/jgoEgRVJST1Ig44Gr44GX44Gq44GE77yIYmVuY2gg44Ki44Kr44Km44Oz44OI44GuIHJvbGU9MjAg44GnIDExIOWAi+aIkOWKn+OCkuWun+a4rOa4iOOBv++8ieOAglxcbl9wZl9pYW1wb2xfbGltaXRzIDo9IHtcXG5cXHRcXFwiQVdTOjpJQU06OlJvbGVcXFwiOiAyNSxcXG5cXHRcXFwiQVdTOjpJQU06OlVzZXJcXFwiOiAyMCxcXG5cXHRcXFwiQVdTOjpJQU06Okdyb3VwXFxcIjogMTAsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LWNvdW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYW5hZ2VkUG9saWN5QXJuc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgbWFuYWdlZCBwb2xpY2llcyBhcmUgYXR0YWNoZWQsIGJ1dCB0aGUgaGFyZCBtYXhpbXVtIGZvciAlcyBpcyAlZCAocXVvdGEgZGVmYXVsdHM6IHJvbGUgMjAsIHVzZXIgMTAsIGdyb3VwIDEwOyByYWlzYWJsZSBvbmx5IHVwIHRvIHRoZSBoYXJkIG1heGltdW0pOyBkZXBsb3ltZW50IGZhaWxzIHdpdGggTGltaXRFeGNlZWRlZFxcXCIsIFtuLCBydHlwZSwgbGltaXRdKSxcXG5cXHRcXFwiQ29uc29saWRhdGUgc3RhdGVtZW50cyBpbnRvIGZld2VyIG1hbmFnZWQgcG9saWNpZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBsaW1pdCBpbiBfcGZfaWFtcG9sX2xpbWl0c1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRhcnIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYW5hZ2VkUG9saWN5QXJuc1xcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG4gOj0gY291bnQoYXJyKVxcblxcdG4gPiBsaW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hbmFnZWQgcG9saWN5IGRvY3VtZW50cyBhcmUgbGltaXRlZCB0byA2MTQ0IGNoYXJhY3RlcnMgKHdoaXRlc3BhY2UgZXhjbHVkZWQpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQb2xpY3lEb2N1bWVudCBpcyAlZCBjaGFyYWN0ZXJzIChKU09OIHdpdGhvdXQgd2hpdGVzcGFjZSkgYnV0IHRoZSBtYW5hZ2VkIHBvbGljeSBsaW1pdCBpcyA2MTQ0XFxcIiwgW3NpemVdKSxcXG5cXHRcXFwiU3BsaXQgdGhlIGRvY3VtZW50IGludG8gbXVsdGlwbGUgbWFuYWdlZCBwb2xpY2llcyBvciBzaG9ydGVuIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCIpXFxuXFx0ZG9jIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChkb2MpXFxuXFx0c2l6ZSA6PSBjb3VudChqc29uLm1hcnNoYWwoZG9jKSlcXG5cXHRzaXplID4gNjE0NFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktYWN0aW9uLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY3Rpb25zIG11c3QgY2FycnkgYSBzZXJ2aWNlIHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBiYXJlIGFjdGlvbiBuYW1lIGhhcyBubyBzZXJ2aWNlIHRvIGF0dGFjaCB0by4gSW50cmluc2ljcyBpbnNpZGUgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgYXJlIG1hcmtlciBvYmplY3RzLCBzbyBpc19zdHJpbmcgbXV0ZXMgdGhlbS5cXG5fcGZfaWFmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWFmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lhZl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSBbdl0gaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2lhZl92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktYWN0aW9uLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQWN0aW9uICclcycgaGFzIG5vIHNlcnZpY2UgcHJlZml4OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJBY3Rpb25zL0NvbmRpdGlvbnMgbXVzdCBiZSBwcmVmYWNlZCBieSBhIHZlbmRvciwgZS5nLiwgaWFtLCBzZGIsIGVjMiwgZXRjLlxcXFxcXFwiXFxcIiwgW2FdKSxcXG5cXHRcXFwiV3JpdGUgYWN0aW9ucyBhcyBzZXJ2aWNlOkFjdGlvbiAoZS5nLiBzMzpHZXRPYmplY3QpLCBvciAqXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pYWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pYWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIGEgaW4gX3BmX2lhZl92YWxzKG9iamVjdC5nZXQocywgXFxcIkFjdGlvblxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcoYSlcXG5cXHRhICE9IFxcXCIqXFxcIlxcblxcdG5vdCBjb250YWlucyhhLCBcXFwiOlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29uZGl0aW9uIG9wZXJhdG9ycyBjb21lIGZyb20gYSBjbG9zZWQgZ3JhbW1hclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQmFzZSBvcGVyYXRvcnMgcGx1cyB0aGUgSWZFeGlzdHMgc3VmZml4IGFuZCBzZXQtb3BlcmF0b3IgcHJlZml4ZXMuXFxuIyBBIHR5cG8gbGlrZSBTdHJpbmdFcXVhbC9TdHJpbmdFcXVhbHogaXMgdW5yZWFjaGFibGUgZm9yIGV2ZXJ5IG90aGVyXFxuIyBsYXllciBiZWNhdXNlIHRoZSBkb2N1bWVudCBpcyBvcGFxdWUganNvbi5cXG5fcGZfaWNvX2Jhc2UgOj0ge1xcblxcdFxcXCJTdHJpbmdFcXVhbHNcXFwiLCBcXFwiU3RyaW5nTm90RXF1YWxzXFxcIiwgXFxcIlN0cmluZ0VxdWFsc0lnbm9yZUNhc2VcXFwiLCBcXFwiU3RyaW5nTm90RXF1YWxzSWdub3JlQ2FzZVxcXCIsXFxuXFx0XFxcIlN0cmluZ0xpa2VcXFwiLCBcXFwiU3RyaW5nTm90TGlrZVxcXCIsXFxuXFx0XFxcIk51bWVyaWNFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY05vdEVxdWFsc1xcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5cXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuRXF1YWxzXFxcIixcXG5cXHRcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuXFxcIiwgXFxcIk51bWVyaWNHcmVhdGVyVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVFcXVhbHNcXFwiLCBcXFwiRGF0ZU5vdEVxdWFsc1xcXCIsIFxcXCJEYXRlTGVzc1RoYW5cXFwiLCBcXFwiRGF0ZUxlc3NUaGFuRXF1YWxzXFxcIixcXG5cXHRcXFwiRGF0ZUdyZWF0ZXJUaGFuXFxcIiwgXFxcIkRhdGVHcmVhdGVyVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkJvb2xcXFwiLCBcXFwiQmluYXJ5RXF1YWxzXFxcIiwgXFxcIklwQWRkcmVzc1xcXCIsIFxcXCJOb3RJcEFkZHJlc3NcXFwiLFxcblxcdFxcXCJBcm5FcXVhbHNcXFwiLCBcXFwiQXJuTGlrZVxcXCIsIFxcXCJBcm5Ob3RFcXVhbHNcXFwiLCBcXFwiQXJuTm90TGlrZVxcXCIsIFxcXCJOdWxsXFxcIixcXG59XFxuXFxuX3BmX2ljb19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2ljb19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pY29fc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG4jIFN0cmlwIGFuIG9wdGlvbmFsIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeCwgdGhlbiBJZkV4aXN0cy5cXG5fcGZfaWNvX3VucHJlZml4ZWQob3ApIDo9IHBhcnRzW2NvdW50KHBhcnRzKSAtIDFdIGlmIHBhcnRzIDo9IHNwbGl0KG9wLCBcXFwiOlxcXCIpXFxuXFxuX3BmX2ljb19yb290KG9wKSA6PSBzdWJzdHJpbmcoYiwgMCwgY291bnQoYikgLSA4KSBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0ZW5kc3dpdGgoYiwgXFxcIklmRXhpc3RzXFxcIilcXG59XFxuXFxuX3BmX2ljb19yb290KG9wKSA6PSBiIGlmIHtcXG5cXHRiIDo9IF9wZl9pY29fdW5wcmVmaXhlZChvcClcXG5cXHRub3QgZW5kc3dpdGgoYiwgXFxcIklmRXhpc3RzXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWNvbmRpdGlvbi1vcGVyYXRvclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLkNvbmRpdGlvblxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ29uZGl0aW9uIG9wZXJhdG9yICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN5bnRheCBlcnJvcnMgaW4gcG9saWN5LlxcXFxcXFwiXFxcIiwgW29wXSksXFxuXFx0XFxcIlVzZSBhIGRvY3VtZW50ZWQgb3BlcmF0b3IgKFN0cmluZ0VxdWFscywgQXJuTGlrZSwgLi4uKSwgb3B0aW9uYWxseSB3aXRoIElmRXhpc3RzIG9yIGEgRm9yQWxsVmFsdWVzOi9Gb3JBbnlWYWx1ZTogcHJlZml4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2ljb19kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2ljb19zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdGNvbmQgOj0gb2JqZWN0LmdldChzLCBcXFwiQ29uZGl0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGNvbmQpXFxuXFx0c29tZSBvcCwgXyBpbiBjb25kXFxuXFx0aXNfc3RyaW5nKG9wKVxcblxcdG5vdCBfcGZfaWNvX3Jvb3Qob3ApIGluIF9wZl9pY29fYmFzZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZHVwbGljYXRlLXNpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGF0ZW1lbnQgSURzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGFpcndpc2UgdW5pcXVlbmVzcyB3aXRoaW4gb25lIGRvY3VtZW50OyBzZXBhcmF0ZSBkb2N1bWVudHMgbWF5IHJldXNlXFxuIyBpZHMgZnJlZWx5Llxcbl9wZl9pZHNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZHNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWRzX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5TaWRcXFwiLCBbcGF0aCwgal0pLFxcblxcdHNwcmludGYoXFxcIlNpZCAnJXMnIHJlcGVhdHMgd2l0aGluIG9uZSBwb2xpY3k7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN0YXRlbWVudCBJRHMgKFNJRCkgaW4gYSBzaW5nbGUgcG9saWN5IG11c3QgYmUgdW5pcXVlLlxcXFxcXFwiXFxcIiwgW3NpZF0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHN0YXRlbWVudCBpbiB0aGUgZG9jdW1lbnQgYSBkaXN0aW5jdCBTaWQgKG9yIGRyb3AgdGhlIGR1cGxpY2F0ZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZHNfZG9jc1xcblxcdHN0bXRzIDo9IF9wZl9pZHNfc3RtdHMoZClcXG5cXHRzb21lIFtpLCBhXSBpbiBzdG10c1xcblxcdHNvbWUgW2osIGJdIGluIHN0bXRzXFxuXFx0aSA8IGpcXG5cXHRpc19vYmplY3QoYSlcXG5cXHRpc19vYmplY3QoYilcXG5cXHRzaWQgOj0gb2JqZWN0LmdldChhLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoc2lkKVxcblxcdHNpZCA9PSBvYmplY3QuZ2V0KGIsIFxcXCJTaWRcXFwiLCBcXFwiX19wZl9vdGhlclxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1lZmZlY3QtY2FzZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFZmZlY3QgaXMgY2FzZS1zZW5zaXRpdmUgQWxsb3cgb3IgRGVueVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTG93ZXJjYXNlIGVmZmVjdHMgYXJlIGEgY2xhc3NpYyBoYW5kLXdyaXR0ZW4tSlNPTiB0eXBvIHRoZSBzY2hlbWFcXG4jIGNhbm5vdCBzZWUgKHRoZSBkb2N1bWVudCBpcyBvcGFxdWUganNvbikuXFxuX3BmX2llY19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2llY19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pZWNfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5FZmZlY3RcXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkVmZmVjdCAnJXMnIGlzIG5vdCBBbGxvdyBvciBEZW55IChjYXNlLXNlbnNpdGl2ZSk7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlRoZSBwb2xpY3kgZmFpbGVkIGxlZ2FjeSBwYXJzaW5nXFxcXFxcXCJcXFwiLCBbZWZdKSxcXG5cXHRcXFwiVXNlIEVmZmVjdDogQWxsb3cgb3IgRWZmZWN0OiBEZW55XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWNfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWNfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRlZiA6PSBvYmplY3QuZ2V0KHMsIFxcXCJFZmZlY3RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX3N0cmluZyhlZilcXG5cXHRub3QgZWYgaW4ge1xcXCJBbGxvd1xcXCIsIFxcXCJEZW55XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWV4Y2x1c2l2ZS1maWVsZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9uL05vdEFjdGlvbiBhbmQgUmVzb3VyY2UvTm90UmVzb3VyY2UgYXJlIGV4Y2x1c2l2ZSBwYWlyc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRWFjaCBwYWlyIGlzIGVpdGhlci1vciBwZXIgc3RhdGVtZW50OyBib3RoIGF0IG9uY2UgaXMgYSBzeW50YXggZXJyb3IuXFxuX3BmX2llZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2llZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pZWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWVmX3BhaXJzIDo9IHtbXFxcIkFjdGlvblxcXCIsIFxcXCJOb3RBY3Rpb25cXFwiXSwgW1xcXCJSZXNvdXJjZVxcXCIsIFxcXCJOb3RSZXNvdXJjZVxcXCJdfVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuJXNcXFwiLCBbcGF0aCwgaSwgcGFpclsxXV0pLFxcblxcdHNwcmludGYoXFxcIlN0YXRlbWVudCBzZXRzIGJvdGggJXMgYW5kICVzOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtwYWlyWzBdLCBwYWlyWzFdXSksXFxuXFx0XFxcIktlZXAgb25lIG9mIHRoZSBwYWlyIHBlciBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2llZl9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2llZl9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHNvbWUgcGFpciBpbiBfcGZfaWVmX3BhaXJzXFxuXFx0b2JqZWN0LmdldChzLCBwYWlyWzBdLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzLCBwYWlyWzFdLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1yZXNvdXJjZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVzb3VyY2VzIG11c3QgYmUgQVJOcyBvciAqXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IGxpdGVyYWwgc3RyaW5ncyBhcmUganVkZ2VkIC0gRm46OkdldEF0dCAvIEZuOjpTdWIgdmFsdWVzIHN1cmZhY2VcXG4jIGFzIG1hcmtlciBvYmplY3RzIGluIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKG1lYXN1cmVkKSwgc28gdGhlXFxuIyBpc19zdHJpbmcgZ3VhcmQgbXV0ZXMgdGhlbS5cXG5fcGZfaXJmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaXJmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lyZl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSBbdl0gaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2lyZl92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIlJlc291cmNlICclcycgaXMgbm90IGFuIEFSTjsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUmVzb3VyY2UgJXMgbXVzdCBiZSBpbiBBUk4gZm9ybWF0IG9yICcqJy5cXFxcXFxcIlxcXCIsIFtyLCByXSksXFxuXFx0XFxcIlVzZSBhIGZ1bGwgQVJOIChhcm46Li4uKSBvciAqXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pcmZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pcmZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHIgaW4gX3BmX2lyZl92YWxzKG9iamVjdC5nZXQocywgXFxcIlJlc291cmNlXFxcIiwgW10pKVxcblxcdGlzX3N0cmluZyhyKVxcblxcdHIgIT0gXFxcIipcXFwiXFxuXFx0bm90IHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktc3RhdGVtZW50LXJlc291cmNlLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklkZW50aXR5IHBvbGljeSBzdGF0ZW1lbnRzIG5lZWQgUmVzb3VyY2Ugb3IgTm90UmVzb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc3RhdGVtZW50IHNjb3BlZCB0byBub3RoaW5nIGlzIHJlamVjdGVkLlxcbl9wZl9pc3JyX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaXNycl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaXNycl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXNycl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1zdGF0ZW1lbnQtcmVzb3VyY2UtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZFxcXCIsIFtwYXRoLCBpXSksXFxuXFx0XFxcIlN0YXRlbWVudCBoYXMgbmVpdGhlciBSZXNvdXJjZSBub3IgTm90UmVzb3VyY2U7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlBvbGljeSBzdGF0ZW1lbnQgbXVzdCBjb250YWluIHJlc291cmNlcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBSZXNvdXJjZSAoYW4gQVJOIG9yICopIHRvIHRoZSBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2lzcnJfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pc3JyX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUmVzb3VyY2VcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiTm90UmVzb3VyY2VcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBvbGljeSBWZXJzaW9uIG11c3QgYmUgMjAxMi0xMC0xNyBvciAyMDA4LTEwLTE3XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdmVyc2lvbiBzdHJpbmcgaXMgYW4gZW51bSBvZiB0d28gZGF0ZXM7IGFueXRoaW5nIGVsc2UgaXMgYSBzeW50YXhcXG4jIGVycm9yIGF0IGNyZWF0ZS5cXG5fcGZfaXB2X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaXB2X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5WZXJzaW9uXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJQb2xpY3kgVmVyc2lvbiAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0XFxcIlVzZSBWZXJzaW9uOiAyMDEyLTEwLTE3XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c192ZXJzaW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2lwdl9kb2NzXFxuXFx0diA6PSBvYmplY3QuZ2V0KGQsIFxcXCJWZXJzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgdiBpbiB7XFxcIjIwMTItMTAtMTdcXFwiLCBcXFwiMjAwOC0xMC0xN1xcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXRydXN0LXBvbGljeS1uby1yZXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUcnVzdCBwb2xpY2llcyBjYW5ub3QgY2FycnkgYSBSZXNvdXJjZSBmaWVsZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByb2xlIGl0c2VsZiBpcyB0aGUgcmVzb3VyY2Ugb2YgaXRzIHRydXN0IHBvbGljeTsgYW4gZXhwbGljaXRcXG4jIFJlc291cmNlIGZpZWxkIGlzIHByb2hpYml0ZWQuXFxuX3BmX2l0bnJfdHJ1c3QobmFtZSkgOj0gZCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXNzdW1lUm9sZVBvbGljeURvY3VtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QoZClcXG59XFxuXFxuX3BmX2l0bnJfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2l0bnJfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS10cnVzdC1wb2xpY3ktbm8tcmVzb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXNzdW1lUm9sZVBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtpXSksXFxuXFx0XFxcIlRydXN0IHBvbGljeSBzdGF0ZW1lbnQgaGFzIGEgUmVzb3VyY2UgZmllbGQ7IHRoZSByb2xlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSGFzIHByb2hpYml0ZWQgZmllbGQgUmVzb3VyY2VcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlJlbW92ZSBSZXNvdXJjZSBmcm9tIHRoZSB0cnVzdCBwb2xpY3kgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdGQgOj0gX3BmX2l0bnJfdHJ1c3QobmFtZSlcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXRucl9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlJlc291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS10cnVzdC1wb2xpY3ktc2VydmljZS1wcmluY2lwYWxcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VydmljZSBwcmluY2lwYWxzIGxpdmUgdW5kZXIgYW1hem9uYXdzLmNvbVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNoYXBlIGNoZWNrIG9ubHk6IGV2ZXJ5IHNlcnZpY2UgcHJpbmNpcGFsIGVuZHMgaW4gLmFtYXpvbmF3cy5jb20gKG9yXFxuIyAuYW1hem9uYXdzLmNvbS5jbiBpbiB0aGUgQ2hpbmEgcGFydGl0aW9uKS4gV2hldGhlciBhIHdlbGwtc2hhcGVkIG5hbWVcXG4jIGV4aXN0cyBpcyBsZWZ0IHRvIHRoZSBzZXJ2aWNlLlxcbl9wZl9pdHNwX3RydXN0KG5hbWUpIDo9IGQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGQpXFxufVxcblxcbl9wZl9pdHNwX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pdHNwX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuX3BmX2l0c3BfdmFscyh2KSA6PSBbdl0gaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2l0c3BfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxuX3BmX2l0c3Bfb2soc3ApIGlmIGVuZHN3aXRoKHNwLCBcXFwiLmFtYXpvbmF3cy5jb21cXFwiKVxcblxcbl9wZl9pdHNwX29rKHNwKSBpZiBlbmRzd2l0aChzcCwgXFxcIi5hbWF6b25hd3MuY29tLmNuXFxcIilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS10cnVzdC1wb2xpY3ktc2VydmljZS1wcmluY2lwYWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXNzdW1lUm9sZVBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5QcmluY2lwYWwuU2VydmljZVxcXCIsIFtpXSksXFxuXFx0c3ByaW50ZihcXFwiU2VydmljZSBwcmluY2lwYWwgJyVzJyBpcyBub3QgYW4gYW1hem9uYXdzLmNvbSBkb21haW47IHRoZSByb2xlIGNyZWF0ZSBmYWlscyB3aXRoICdJbnZhbGlkIHByaW5jaXBhbCBpbiBwb2xpY3k6IFxcXFxcXFwiU0VSVklDRVxcXFxcXFwiOlxcXFxcXFwiJXNcXFxcXFxcIidcXFwiLCBbc3AsIHNwXSksXFxuXFx0XFxcIlVzZSB0aGUgc2VydmljZSBwcmluY2lwYWwgbmFtZSwgZS5nLiBsYW1iZGEuYW1hem9uYXdzLmNvbVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfcHJpbmNpcGFsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0ZCA6PSBfcGZfaXRzcF90cnVzdChuYW1lKVxcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pdHNwX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0cCA6PSBvYmplY3QuZ2V0KHMsIFxcXCJQcmluY2lwYWxcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QocClcXG5cXHRzb21lIHNwIGluIF9wZl9pdHNwX3ZhbHMob2JqZWN0LmdldChwLCBcXFwiU2VydmljZVxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcoc3ApXFxuXFx0bm90IF9wZl9pdHNwX29rKHNwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1jb2RlLXMzLXBhaXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUzMtYmFzZWQgQ29kZSBuZWVkcyBib3RoIFMzQnVja2V0IGFuZCBTM0tleVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBIYWxmIGFuIFMzIHJlZmVyZW5jZSBjYW5ub3QgYmUgZmV0Y2hlZC4gT25seSBqdWRnZWQgd2hlbiBuZWl0aGVyIFppcEZpbGVcXG4jIG5vciBJbWFnZVVyaSBpcyBwcmVzZW50ICh0aG9zZSBzaGFwZXMgYmVsb25nIHRvIHRoZSBleGNsdXNpdmUgcnVsZSkuXFxuX3BmX2xjc3BfY29kZShuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb2RlXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbl9wZl9sY3NwX2hhcyhjLCBrKSBpZiBvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfbGNzcF9oYWxmKGMpIDo9IFtcXFwiUzNLZXlcXFwiLCBcXFwiUzNCdWNrZXRcXFwiXSBpZiB7XFxuXFx0X3BmX2xjc3BfaGFzKGMsIFxcXCJTM0J1Y2tldFxcXCIpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNLZXlcXFwiKVxcbn1cXG5cXG5fcGZfbGNzcF9oYWxmKGMpIDo9IFtcXFwiUzNCdWNrZXRcXFwiLCBcXFwiUzNLZXlcXFwiXSBpZiB7XFxuXFx0X3BmX2xjc3BfaGFzKGMsIFxcXCJTM0tleVxcXCIpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNCdWNrZXRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1jb2RlLXMzLXBhaXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQ29kZS4lc1xcXCIsIFttaXNzaW5nWzBdXSksXFxuXFx0c3ByaW50ZihcXFwiQ29kZSBoYXMgJXMgYnV0IG5vICVzOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTMyBCdWNrZXQgYW5kIEtleSBhcmUgcmVxdWlyZWQgZm9yIHVwbG9hZGluZyB3aXRoIFMzIHBhcmFtZXRlcnMuXFxcXFxcXCJcXFwiLCBbbWlzc2luZ1sxXSwgbWlzc2luZ1swXV0pLFxcblxcdFxcXCJTZXQgYm90aCBTM0J1Y2tldCBhbmQgUzNLZXlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1jb2RlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGMgOj0gX3BmX2xjc3BfY29kZShuYW1lKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIlppcEZpbGVcXFwiKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIkltYWdlVXJpXFxcIilcXG5cXHRtaXNzaW5nIDo9IF9wZl9sY3NwX2hhbGYoYylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtY29kZS16aXBmaWxlLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbmxpbmUgWmlwRmlsZSBleGNsdWRlcyBldmVyeSBvdGhlciBDb2RlIHBhcmFtZXRlclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBLZXkgcHJlc2VuY2UgaW4gdGhlIENvZGUgb2JqZWN0IGlzIHRoZSB2aW9sYXRpb247IGNoZWNrZWQgYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xjenhfb3RoZXIgOj0ge1xcXCJTM0J1Y2tldFxcXCIsIFxcXCJTM0tleVxcXCIsIFxcXCJTM09iamVjdFZlcnNpb25cXFwiLCBcXFwiSW1hZ2VVcmlcXFwifVxcblxcbl9wZl9sY3p4X2NvZGUobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29kZVxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1jb2RlLXppcGZpbGUtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvZGUuJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkNvZGUgc2V0cyBaaXBGaWxlIHRvZ2V0aGVyIHdpdGggJXM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlBsZWFzZSBkbyBub3QgcHJvdmlkZSBvdGhlciBGdW5jdGlvbkNvZGUgcGFyYW1ldGVycyB3aGVuIHByb3ZpZGluZyBhIFppcEZpbGUuXFxcXFxcXCJcXFwiLCBba10pLFxcblxcdFxcXCJLZWVwIHRoZSBpbmxpbmUgWmlwRmlsZSBhbG9uZSwgb3Igc3dpdGNoIGVudGlyZWx5IHRvIHRoZSBTMy9pbWFnZSByZWZlcmVuY2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1jb2RlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGMgOj0gX3BmX2xjenhfY29kZShuYW1lKVxcblxcdG9iamVjdC5nZXQoYywgXFxcIlppcEZpbGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0c29tZSBrIGluIF9wZl9sY3p4X290aGVyXFxuXFx0b2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWRscS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGRlYWQgbGV0dGVyIHRhcmdldCBtdXN0IHNpdCBpbiB0aGUgZGVwbG95IHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZWdpb24gY29tcGFyaXNvbiBuZWVkcyB0aGUgZGVwbG95IHJlZ2lvbiwgd2hpY2ggb25seSB0aGlzIHBhY2sgc2Vlc1xcbiMgKGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgaW4gZW5mb3JjZSBtb2RlOyB0aGUgcnVsZVxcbiMgc2tpcHMgd2l0aG91dCBpdCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZGxxLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVhZExldHRlckNvbmZpZy5UYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIkRlYWQgbGV0dGVyIHRhcmdldCByZWdpb24gJyVzJyBpcyBub3QgdGhlIGRlcGxveSByZWdpb24gJyVzJzsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBkZWFkIGxldHRlciBxdWV1ZSBBUk46IFRoZSByZXNvdXJjZSBzcGVjaWZpZWQgYnkgdGhlIFRhcmdldEFybiBtdXN0IGJlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGUgTGFtYmRhIGZ1bmN0aW9uIGl0J3MgYXNzb2NpYXRlZCB3aXRoLlxcXFxcXFwiXFxcIiwgW3BhcnRzWzNdLCByZWdpb25dKSxcXG5cXHRcXFwiUG9pbnQgRGVhZExldHRlckNvbmZpZyBhdCBhIHF1ZXVlIG9yIHRvcGljIGluIHRoZSBzYW1lIHJlZ2lvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWRlYWRsZXR0ZXJjb25maWcuaHRtbFxcXCIpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVhZExldHRlckNvbmZpZy5UYXJnZXRBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzNdICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1kbHEtc2VydmljZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgZGVhZCBsZXR0ZXIgdGFyZ2V0IG11c3QgYmUgYW4gU1FTIHF1ZXVlIG9yIFNOUyB0b3BpY1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBzZWdtZW50IGxpdmVzIGluc2lkZSB0aGUgQVJOIHN0cmluZywgaW52aXNpYmxlIHRvIGFueVxcbiMgc2NoZW1hIGxheWVyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWRscS1zZXJ2aWNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGVhZCBsZXR0ZXIgdGFyZ2V0IHNlcnZpY2UgJyVzJyBpcyBub3Qgc3FzIG9yIHNuczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBkZWFkIGxldHRlciBxdWV1ZSBBUk46IFRoZSBzZXJ2aWNlIHNwZWNpZmllZCBieSB0aGUgVGFyZ2V0QXJuIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlYWQgbGV0dGVyIGNvbmZpZ3VyYXRpb24uXFxcXFxcXCJcXFwiLCBbcGFydHNbMl1dKSxcXG5cXHRcXFwiUG9pbnQgRGVhZExldHRlckNvbmZpZyBhdCBhbiBTUVMgcXVldWUgb3IgU05TIHRvcGljIEFSTlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWRlYWRsZXR0ZXJjb25maWcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVhZExldHRlckNvbmZpZy5UYXJnZXRBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdG5vdCBwYXJ0c1syXSBpbiB7XFxcInNxc1xcXCIsIFxcXCJzbnNcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lZnMtcmVxdWlyZXMtdnBjXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1vdW50aW5nIEVGUyByZXF1aXJlcyBWcGNDb25maWdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTW91bnRpbmcgRUZTIHJlcXVpcmVzIHRoZSBmdW5jdGlvbiB0byBydW4gaW5zaWRlIGEgVlBDLiBLZXkgcHJlc2VuY2UgaXNcXG4jIGNoZWNrZWQgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfbGVmc3ZfcHJvcHMobmFtZSkgOj0gcHJvcHMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lZnMtcmVxdWlyZXMtdnBjXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5WcGNDb25maWdcXFwiLFxcblxcdFxcXCJGaWxlU3lzdGVtQ29uZmlncyB3aXRob3V0IFZwY0NvbmZpZzsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiRnVuY3Rpb24gbXVzdCBiZSBjb25maWd1cmVkIHRvIGV4ZWN1dGUgaW4gYSBWUEMgdG8gcmVmZXJlbmNlIGFjY2VzcyBwb2ludCAuLi4gUGxlYXNlIHVwZGF0ZSB0aGUgZnVuY3Rpb24gY29uZmlndXJhdGlvbiB0byBpbmNsdWRlIFZQQyBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgVnBjQ29uZmlnIHdpdGggc3VibmV0cyB0aGF0IGhhdmUgRUZTIG1vdW50IHRhcmdldHMgaW4gdGhlaXIgQVpzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWZ1bmN0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9sZWZzdl9wcm9wcyhuYW1lKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWxlU3lzdGVtQ29uZmlnc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjQ29uZmlnXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lbnYtc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGEgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBsaW1pdGVkIHRvIDQwOTYgYnl0ZXMgaW4gdG90YWxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMg44Oq44OG44Op44Or5paH5a2X5YiX44Gu44Kt44O8L+WApOOBoOOBkeOCkuaVsOOBiOOCi++8iOODiOODvOOCr+ODs+OBr+OCueOCreODg+ODl++8ieOAguWQiOioiOOBjOaXouOBqyA0MDk2IOOCkui2heOBiOOBplxcbiMg44GE44KM44Gw44CB5a6f6Zqb44Gu44OH44OX44Ot44Kk44Gn44KC5b+F44Ga5aSx5pWX44GZ44KL77yI5a6f44K144Kk44K644Gv5o6o5a6a5Lul5LiK44Gr44GX44GL44Gq44KJ44Gq44GE77yJ44CCXFxuIyBOT1RFOiDjgZPjga7jgqjjg7Pjgrjjg7Pjga4gUmVnbyDjg5Hjg7zjgrXjga/lhoXljIXooajoqJjlhoXjga4gMiDlpInmlbAgc29tZe+8iHNvbWUgaywgdiBpbiB2YXJz77yJ44KSXFxuIyDlj5fjgZHku5jjgZHjgarjgYTjgZ/jgoHjgIFvYmplY3Qua2V5cyDntYznlLHjgafmm7jjgY/jgIJcXG5fcGZfbGVudl9zaXplKHZhcnMpIDo9IHN1bShbcyB8XFxuXFx0c29tZSBrIGluIG9iamVjdC5rZXlzKHZhcnMpXFxuXFx0aXNfc3RyaW5nKHZhcnNba10pXFxuXFx0cyA6PSBjb3VudChrKSArIGNvdW50KHZhcnNba10pXFxuXSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lbnYtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG90YWwgYXQgbGVhc3QgJWQgYnl0ZXMgKGxpdGVyYWwga2V5cyBhbmQgdmFsdWVzKSwgYnV0IExhbWJkYSBsaW1pdHMgdGhlIGVudmlyb25tZW50IHRvIDQwOTYgYnl0ZXM7IENyZWF0ZUZ1bmN0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RvdGFsXSksXFxuXFx0XFxcIk1vdmUgbGFyZ2UgdmFsdWVzIHRvIFNTTSBQYXJhbWV0ZXIgU3RvcmUsIFNlY3JldHMgTWFuYWdlciwgb3IgYSBidW5kbGVkIGNvbmZpZyBmaWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZ2V0dGluZ3N0YXJ0ZWQtbGltaXRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdHZhcnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXNcXFwiKVxcblxcdGlzX29iamVjdCh2YXJzKVxcblxcdHRvdGFsIDo9IF9wZl9sZW52X3NpemUodmFycylcXG5cXHR0b3RhbCA+IDQwOTZcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZXNtLWJhdGNoc2l6ZS13aW5kb3dcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU1FTIGJhdGNoIHNpemVzIG92ZXIgMTAgbmVlZCBhIGJhdGNoaW5nIHdpbmRvd1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU1FTLW9ubHkgY291cGxpbmc6IGJpZyBiYXRjaGVzIG11c3Qgd2FpdCBmb3IgYSB3aW5kb3cuIEtpbmVzaXMgYW5kXFxuIyBEeW5hbW9EQiBzb3VyY2VzIHRha2UgbGFyZ2UgYmF0Y2hlcyB3aXRob3V0IG9uZSwgaGVuY2UgdGhlIFNRUyBndWFyZC5cXG5fcGZfbGJzd19pc19zcXMobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG59XFxuXFxuX3BmX2xic3dfaXNfc3FzKG5hbWUpIGlmIHtcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHNwbGl0KGFybiwgXFxcIjpcXFwiKVsyXSA9PSBcXFwic3FzXFxcIlxcbn1cXG5cXG5fcGZfbGJzd19ub193aW5kb3cobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJNYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKSBpZiB7XFxuXFx0dG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIikpID09IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZXNtLWJhdGNoc2l6ZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkJhdGNoU2l6ZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQmF0Y2hTaXplICV2IHdpdGhvdXQgYSBiYXRjaGluZyB3aW5kb3c7IHRoZSBtYXBwaW5nIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBNYXhpbXVtIGJhdGNoIHdpbmRvdyBpbiBzZWNvbmRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgaWYgbWF4aW11bSBiYXRjaCBzaXplIGlzIGdyZWF0ZXIgdGhhbiAxMFxcXFxcXFwiXFxcIiwgW2JdKSxcXG5cXHRcXFwiU2V0IE1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kcyAoMS0zMDApLCBvciBrZWVwIEJhdGNoU2l6ZSBhdCAxMCBvciBsZXNzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWV2ZW50c291cmNlbWFwcGluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1xcXCIpXFxuXFx0X3BmX2xic3dfaXNfc3FzKG5hbWUpXFxuXFx0YiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CYXRjaFNpemVcXFwiKSlcXG5cXHRiID4gMTBcXG5cXHRfcGZfbGJzd19ub193aW5kb3cobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZXNtLWZpZm8tYmF0Y2hpbmctd2luZG93XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZJRk8gcXVldWVzIHJlamVjdCBhIGJhdGNoaW5nIHdpbmRvd1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRklGTyBvcmRlcmluZyBmb3JiaWRzIGhvbGRpbmcgYSBiYXRjaCBvcGVuLiBGSUZPLW5lc3MgY29tZXMgZnJvbSB0aGVcXG4jIHF1ZXVlIHNpYmxpbmcncyBGaWZvUXVldWUgZmxhZyBvciB0aGUgLmZpZm8gYXJuIHN1ZmZpeC5cXG5fcGZfbGZid19pc19maWZvKG5hbWUpIGlmIHtcXG5cXHRxIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKVxcblxcdHEgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShxLCBcXFwiUHJvcGVydGllcy5GaWZvUXVldWVcXFwiKSkgPT0gdHJ1ZVxcbn1cXG5cXG5fcGZfbGZid19pc19maWZvKG5hbWUpIGlmIHtcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdGVuZHN3aXRoKGFybiwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZXNtLWZpZm8tYmF0Y2hpbmctd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiLFxcblxcdFxcXCJCYXRjaGluZyB3aW5kb3cgb24gYSBGSUZPIHF1ZXVlIHNvdXJjZTsgdGhlIG1hcHBpbmcgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IEJhdGNoaW5nIHdpbmRvdyBpcyBub3Qgc3VwcG9ydGVkIGZvciBGSUZPIHF1ZXVlc1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiRHJvcCBNYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHMsIG9yIHVzZSBhIHN0YW5kYXJkIHF1ZXVlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWV2ZW50c291cmNlbWFwcGluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1xcXCIpXFxuXFx0X3BmX2xmYndfaXNfZmlmbyhuYW1lKVxcblxcdHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIpKSA+IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZXNtLXNxcy1zdGFydGluZy1wb3NpdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTUVMgZXZlbnQgc291cmNlcyByZWplY3QgU3RhcnRpbmdQb3NpdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU3RhcnRpbmdQb3NpdGlvbiBiZWxvbmdzIHRvIHN0cmVhbSBzb3VyY2VzOyBxdWV1ZXMgaGF2ZSBubyBvZmZzZXRzLlxcbiMgRGV0ZWN0ZWQgdmlhIGFuIGluLXRlbXBsYXRlIHF1ZXVlIHNpYmxpbmcgb3IgdGhlIHNxcyBhcm4gc2VnbWVudC5cXG5fcGZfbGVzcF9pc19zcXMobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG59XFxuXFxuX3BmX2xlc3BfaXNfc3FzKG5hbWUpIGlmIHtcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHNwbGl0KGFybiwgXFxcIjpcXFwiKVsyXSA9PSBcXFwic3FzXFxcIlxcbn1cXG5cXG5fcGZfbGVzcF9zZXQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJTdGFydGluZ1Bvc2l0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tc3FzLXN0YXJ0aW5nLXBvc2l0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TdGFydGluZ1Bvc2l0aW9uXFxcIixcXG5cXHRcXFwiU3RhcnRpbmdQb3NpdGlvbiBvbiBhbiBTUVMgZXZlbnQgc291cmNlOyB0aGUgbWFwcGluZyBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogU3RhcnRpbmdQb3NpdGlvbiBpcyBub3QgdmFsaWQgZm9yIFNRUyBldmVudCBzb3VyY2VzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiRHJvcCBTdGFydGluZ1Bvc2l0aW9uIChpdCBvbmx5IGFwcGxpZXMgdG8gS2luZXNpcy9EeW5hbW9EQi9LYWZrYSBzb3VyY2VzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1ldmVudHNvdXJjZW1hcHBpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcXFwiKVxcblxcdF9wZl9sZXNwX2lzX3NxcyhuYW1lKVxcblxcdF9wZl9sZXNwX3NldChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1tZW1vcnktbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1lbW9yeVNpemUgdG9wcyBvdXQgYXQgMTAyNDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgaGFzIHRoZSAxMjggZmxvb3IgYnV0IGlzIG1pc3NpbmcgdGhlIDEwMjQwIGNhcFxcbiMgKGVuZ2luZSBjbGVhbiBvbiAyMDAwMCwgRjMwMzQgb24gNjQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLW1lbW9yeS1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVNpemVcXFwiLFxcblxcdHNwcmludGYoXFxcIk1lbW9yeVNpemUgJXYgaXMgb3ZlciB0aGUgY2FwOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCInTWVtb3J5U2l6ZScgdmFsdWUgZmFpbGVkIHRvIHNhdGlzZnkgY29uc3RyYWludDogTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAyNDBcXFxcXFxcIlxcXCIsIFttXSksXFxuXFx0XFxcIlVzZSBhdCBtb3N0IDEwMjQwIE1CXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWZ1bmN0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdG0gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWVtb3J5U2l6ZVxcXCIpKVxcblxcdG0gPiAxMDI0MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS10aW1lb3V0LW1heFwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaW1lb3V0IHRvcHMgb3V0IGF0IDkwMCBzZWNvbmRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIGhhcyB0aGUgMSBmbG9vciBidXQgaXMgbWlzc2luZyB0aGUgOTAwIGNhcCAoZW5naW5lXFxuIyBjbGVhbiBvbiA5MDEsIEYzMDM0IG9uIDApLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLXRpbWVvdXQtbWF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaW1lb3V0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaW1lb3V0ICV2IGlzIG92ZXIgdGhlIDE1LW1pbnV0ZSBjYXA7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlZhbHVlICcldicgYXQgJ3RpbWVvdXQnIGZhaWxlZCB0byBzYXRpc2Z5IGNvbnN0cmFpbnQ6IE1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDkwMFxcXFxcXFwiXFxcIiwgW3QsIHRdKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgOTAwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaW1lb3V0XFxcIikpXFxuXFx0dCA+IDkwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3MtZmlsdGVyLXBhdHRlcm4tYnJhY2tldFwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBmaWx0ZXIgcGF0dGVybiBzdGFydGluZyB3aXRoICdbJyBtdXN0IGVuZCB3aXRoICddJ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfbGdmcGJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9GaWx0ZXJBbmRQYXR0ZXJuU3ludGF4Lmh0bWxcXFwiXFxuXFxuX3BmX2xnZnBiX21zZyhraW5kKSA6PSBzcHJpbnRmKFxcXCJUaGUgJXMgZmlsdGVyIHBhdHRlcm4gc3RhcnRzIHdpdGggJ1snIGJ1dCBkb2VzIG5vdCBlbmQgd2l0aCAnXSc7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIklmIGEgZmlsdGVyIHBhdHRlcm4gc3RhcnRzIHdpdGggJ1snIGl0IG11c3QgZW5kIHdpdGggJ10nXFxcXFxcXCJcXFwiLCBba2luZF0pXFxuXFxuX3BmX2xnZnBiX2ZpeCA6PSBcXFwiQ2xvc2UgdGhlIGJyYWNrZXQg4oCUIGEgc3BhY2UtZGVsaW1pdGVkIHBhdHRlcm4gaXMgW2ZpZWxkMSwgZmllbGQyLCAuLi5dXFxcIlxcblxcbiMgVGhlIHNhbWUgcGFyc2VyIHJ1bnMgZm9yIG1ldHJpYyBmaWx0ZXJzIGFuZCBzdWJzY3JpcHRpb24gZmlsdGVycywgYW5kIGl0XFxuIyBydW5zIGJlZm9yZSBhbnkgZGVzdGluYXRpb24gdmFsaWRhdGlvbiAoYmVuY2ggYzAxL2MwNikuIE9ubHkgdGhpc1xcbiMgc3RhcnQvZW5kIHBhaXJpbmcgaXMgY2hlY2tlZCBoZXJlOyBhIGZ1bGwgcGF0dGVybiBwYXJzZXIgaXMgb3V0IG9mIHNjb3BlLlxcbl9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApIGlmIHtcXG5cXHR0IDo9IHRyaW1fc3BhY2UocClcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJbXFxcIilcXG5cXHRub3QgZW5kc3dpdGgodCwgXFxcIl1cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3MtZmlsdGVyLXBhdHRlcm4tYnJhY2tldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIsXFxuXFx0X3BmX2xnZnBiX21zZyhcXFwibWV0cmljXFxcIiksXFxuXFx0X3BmX2xnZnBiX2ZpeCwgX3BmX2xnZnBiX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIilcXG5cXHRpc19zdHJpbmcocClcXG5cXHRfcGZfbGdmcGJfdW5iYWxhbmNlZChwKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3MtZmlsdGVyLXBhdHRlcm4tYnJhY2tldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIsXFxuXFx0X3BmX2xnZnBiX21zZyhcXFwic3Vic2NyaXB0aW9uXFxcIiksXFxuXFx0X3BmX2xnZnBiX2ZpeCwgX3BmX2xnZnBiX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcXFwiKVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIilcXG5cXHRpc19zdHJpbmcocClcXG5cXHRfcGZfbGdmcGJfdW5iYWxhbmNlZChwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3MtbWV0cmljLWRpbWVuc2lvbnMtZGVmYXVsdC1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsb2dzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRpbWVuc2lvbnMgYW5kIERlZmF1bHRWYWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRGVmYXVsdFZhbHVlIGlzIGVtaXR0ZWQgd2hlbiBhIGxvZyBsaW5lIGRvZXMgbm90IG1hdGNoLCBidXQgYSBkaW1lbnNpb25cXG4jIHZhbHVlIGNhbiBvbmx5IGNvbWUgZnJvbSBhIG1hdGNoIOKAlCB0aGUgc2VydmljZSByZWplY3RzIHRoZSBjb21iaW5hdGlvbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3MtbWV0cmljLWRpbWVuc2lvbnMtZGVmYXVsdC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zLiVkLkRlZmF1bHRWYWx1ZVxcXCIsIFt0LmluZGV4XSksXFxuXFx0XFxcIlRoZSBtZXRyaWMgdHJhbnNmb3JtYXRpb24gc2V0cyBib3RoIERpbWVuc2lvbnMgYW5kIERlZmF1bHRWYWx1ZTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSW52YWxpZCBtZXRyaWMgdHJhbnNmb3JtYXRpb246IGRpbWVuc2lvbnMgYW5kIGRlZmF1bHQgdmFsdWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBwcm9wZXJ0aWVzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIERlZmF1bHRWYWx1ZSB3aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbiBoYXMgRGltZW5zaW9ucywgb3IgZHJvcCB0aGUgRGltZW5zaW9uc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbG9ncy1tZXRyaWNmaWx0ZXItbWV0cmljdHJhbnNmb3JtYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY1RyYW5zZm9ybWF0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHQudmFsdWUpXFxuXFx0b2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiRGVmYXVsdFZhbHVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdGRpbXMgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiRGltZW5zaW9uc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoZGltcylcXG5cXHRjb3VudChkaW1zKSA+IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsb2dzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgS2luZXNpcyBkZXN0aW5hdGlvbiBuZWVkcyBSb2xlQXJuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ3Nrcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL1N1YnNjcmlwdGlvbkZpbHRlcnMuaHRtbFxcXCJcXG5cXG4jIFRoZSBkZXN0aW5hdGlvbiBpcyBwcm92YWJseSBLaW5lc2lzIHR3byB3YXlzOiBhIGxpdGVyYWxcXG4jIGFybjo8cGFydGl0aW9uPjpraW5lc2lzOiBzdHJpbmcsIG9yIGEgUmVmL0dldEF0dCB0aGF0IHJlc29sdmUoKSB0dXJucyBpbnRvXFxuIyB0aGUgbG9naWNhbCBJRCBvZiBhbiBpbi10ZW1wbGF0ZSBBV1M6OktpbmVzaXM6OlN0cmVhbS4gU2NvcGVkIHRvIEtpbmVzaXMg4oCUXFxuIyB0aGUgYmVuY2ggZXJyb3IgbmFtZXMgXFxcInZlbmRvciBraW5lc2lzXFxcIjsgb3RoZXIgdmVuZG9ycyB3ZXJlIG5vdCBtZWFzdXJlZC5cXG5fcGZfbGdza3Jfa2luZXNpc19kZXN0KG5hbWUpIGlmIHtcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzdGluYXRpb25Bcm5cXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdHBhcnRzIDo9IHNwbGl0KGQsIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gM1xcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImtpbmVzaXNcXFwiXFxufVxcblxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0ZCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzOjpTdHJlYW1cXFwiKVxcbn1cXG5cXG4jIFRydWUgYWJzZW5jZSBvZiBSb2xlQXJuIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlJvbGVBcm5cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1zdWJzY3JpcHRpb24ta2luZXNpcy1yb2xlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb2xlQXJuXFxcIixcXG5cXHRcXFwiVGhlIHN1YnNjcmlwdGlvbiBmaWx0ZXIgdGFyZ2V0cyBhIEtpbmVzaXMgc3RyZWFtIGJ1dCBzZXRzIG5vIFJvbGVBcm47IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcImRlc3RpbmF0aW9uQXJuIGZvciB2ZW5kb3Iga2luZXNpcyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHJvbGVBcm5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFJvbGVBcm4gZm9yIGEgcm9sZSB0aGF0IGxvZ3MuYW1hem9uYXdzLmNvbSBjYW4gYXNzdW1lIHdpdGgga2luZXNpczpQdXRSZWNvcmQgb24gdGhlIHN0cmVhbVxcXCIsXFxuXFx0X3BmX2xnc2tyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcXFwiKVxcblxcdF9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSlcXG5cXHRfcGZfbGdza3Jfcm9sZV9hYnNlbnQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDbG91ZEZyb250IGFsaWFzIHRhcmdldCBtdXN0IHVzZSBob3N0ZWQgem9uZSBaMkZEVE5EQVRBUVlXMlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGlzIGFsaWFzZWQgdGhyb3VnaCB0aGUgc2luZ2xlIGdsb2JhbCBob3N0ZWRcXG4jIHpvbmUgWjJGRFROREFUQVFZVzIuIEFueSBvdGhlciBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgKGFuIEFMQidzIHJlZ2lvbmFsXFxuIyB6b25lIGlkIGlzIHRoZSBjbGFzc2ljIHBhc3RlIGVycm9yKSBmYWlscyBhdCBkZXBsb3kgdGltZSB3aXRoIFxcXCJ0aGUgYWxpYXNcXG4jIHRhcmdldCBuYW1lIGRvZXMgbm90IGxpZSB3aXRoaW4gdGhlIHRhcmdldCB6b25lXFxcIi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtYWxpYXMtY2xvdWRmcm9udC16b25lLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhbGlhcyB0YXJnZXRzIGEgQ2xvdWRGcm9udCBkb21haW4sIHNvIEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCBtdXN0IGJlIFoyRkRUTkRBVEFRWVcyLCBub3QgJyVzJ1xcXCIsIFt6aWRdKSxcXG5cXHRcXFwiU2V0IEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCB0byBaMkZEVE5EQVRBUVlXMiAoaW4gdGhlIENESywgcm91dGU1M190YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQgZG9lcyB0aGlzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9jZl9yZWdpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRkbnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5ETlNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoZG5zKVxcblxcdGVuZHN3aXRoKHRyaW1fc3VmZml4KGxvd2VyKGRucyksIFxcXCIuXFxcIiksIFxcXCIuY2xvdWRmcm9udC5uZXRcXFwiKVxcblxcdHppZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHppZClcXG5cXHR6aWQgIT0gXFxcIloyRkRUTkRBVEFRWVcyXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtYXBleC1jbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDTkFNRSByZWNvcmQgaXMgbm90IHBlcm1pdHRlZCBhdCB0aGUgem9uZSBhcGV4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX2FwZXhfbm9ybShuKSA6PSB0cmltX3N1ZmZpeChsb3dlcihuKSwgXFxcIi5cXFwiKVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDIzIGNhdGNoZXMgYW4gYXBleCBDTkFNRSBvbmx5IHdoZW4gdGhlIHJlY29yZCBjYXJyaWVzIGFcXG4jIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUuIENESyBMMiBhbHdheXMgbGlua3MgcmVjb3JkcyB3aXRoXFxuIyBIb3N0ZWRab25lSWQ6IHtcXFwiUmVmXFxcIjogPHpvbmU+fSwgd2hpY2ggRTMwMjMgZG9lcyBub3Qgc2VlIChtZWFzdXJlZCAyMDI2LTA5LTAyLFxcbiMgZW5naW5lIDEuNy4wLWJldGEpLiByZXNvbHZlKCkgdHVybnMgc3VjaCBhIFJlZiBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELFxcbiMgc28gd2hlbiB0aGF0IElEIG5hbWVzIGEgSG9zdGVkWm9uZSBpbiB0aGUgc2FtZSB0ZW1wbGF0ZSB3ZSBjYW4gcmVhZCBpdHNcXG4jIGxpdGVyYWwgTmFtZSBhbmQgZG8gdGhlIGFwZXggY29tcGFyaXNvbiBvdXJzZWx2ZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleCAoJyVzJyk7IHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggXFxcXFxcXCJSUlNldCBvZiB0eXBlIENOQU1FIC4uLiBpcyBub3QgcGVybWl0dGVkIGF0IGFwZXhcXFxcXFxcIlxcXCIsIFtyZWNOYW1lXSksXFxuXFx0XFxcIlVzZSBhbiBhbGlhcyBBL0FBQUEgcmVjb3JkIGZvciB0aGUgYXBleCAoQWxpYXNUYXJnZXQpLCBvciBtb3ZlIHRoZSBDTkFNRSB0byBhIHN1YmRvbWFpblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZXNvdXJjZS1yZWNvcmQtc2V0cy1jaG9vc2luZy1hbGlhcy1ub24tYWxpYXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0enJlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHpyZWYpXFxuXFx0enJlZiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXFxcIilcXG5cXHR6b25lTmFtZSA6PSByZXNvbHZlKHpyZWYsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6b25lTmFtZSlcXG5cXHRyZWNOYW1lIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlY05hbWUpXFxuXFx0X3BmX3I1M19hcGV4X25vcm0ocmVjTmFtZSkgPT0gX3BmX3I1M19hcGV4X25vcm0oem9uZU5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1nZW9sb2NhdGlvbi1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBleHByZXNzZXMgdGhpcyBhcyBhIG9uZU9mLCB3aGljaCB0aGUgc2VydmVyLXNpZGVcXG4jIHByZS1kZXBsb3kgdmFsaWRhdGlvbiBlbmZvcmNlcyAoXFxcIjIgc3Vic2NoZW1hcyBtYXRjaGVkIGluc3RlYWQgb2Ygb25lXFxcIikgYnV0XFxuIyB0aGUgYnVuZGxlZCBlbmdpbmUgZG9lcyBub3QgZXZhbHVhdGUg4oCUIGhlbmNlIHVwc3RyZWFtOiBwZW5kaW5nLWVuZ2luZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIsXFxuXFx0XFxcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGU7IENsb3VkRm9ybWF0aW9uIHJlamVjdHMgdGhlIHJlY29yZCBzZXQgYmVmb3JlIHByb3Zpc2lvbmluZ1xcXCIsXFxuXFx0XFxcIktlZXAgZWl0aGVyIHRoZSBDb250aW5lbnRDb2RlIG9yIHRoZSBDb3VudHJ5Q29kZSAoYWRkIFN1YmRpdmlzaW9uQ29kZSBvbmx5IG5leHQgdG8gQ291bnRyeUNvZGUgVVMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1yb3V0ZTUzLXJlY29yZHNldC1nZW9sb2NhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGdlbyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdlb0xvY2F0aW9uXFxcIilcXG5cXHRpc19vYmplY3QoZ2VvKVxcblxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGdlbywgXFxcIkNvbnRpbmVudENvZGVcXFwiLCBudWxsKSlcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb3VudHJ5Q29kZVxcXCIsIG51bGwpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1wiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGlWYWx1ZUFuc3dlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBBbGlhc1RhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0XFxcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXQ7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIk11bHRpdmFsdWUgYW5zd2VyIHJyc2V0IHNob3VsZCBub3QgYmUgYW4gYWxpYXMgcnJzZXRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBwbGFpbiBtdWx0aXZhbHVlIHJlY29yZHMgd2l0aCBSZXNvdXJjZVJlY29yZHMsIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlciBhbmQga2VlcCB0aGUgYWxpYXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5TIHJlY29yZHMgdGFrZSBubyByb3V0aW5nIHBvbGljeTsgQ05BTUUgY2Fubm90IGJlIG11bHRpdmFsdWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M190eXBvbF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M190eXBvbF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfdHlwb2xfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG4jIE9ubHkgY29tYmluYXRpb25zIHRoYXQgZmFpbGVkIG9uIGEgcmVhbCBkZXBsb3kgYXJlIGZsYWdnZWQuIFNPQS9EUyB3aXRoIGFcXG4jIHJvdXRpbmcgcG9saWN5IGFyZSBhbHNvIGRvY3VtZW50ZWQgYXMgdW5zdXBwb3J0ZWQgYnV0IHdlcmUgbm90IG1lYXN1cmVkLCBzb1xcbiMgdGhleSBhcmUgZGVsaWJlcmF0ZWx5IGxlZnQgb3V0IChzZWUgdGhlIGRpc2NvdmVyeSBpc3N1ZSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQW4gTlMgcmVjb3JkIGNhbm5vdCB1c2UgYSByb3V0aW5nIHBvbGljeTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwidGhpcyB0eXBlIG9mIFJSU2V0IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBhIHNpbXBsZSByZWNvcmQgc2V0IGZvciBOUyByZWNvcmRzIChubyBXZWlnaHQvUmVnaW9uL0ZhaWxvdmVyL0dlb0xvY2F0aW9uL011bHRpVmFsdWVBbnN3ZXIvQ2lkclJvdXRpbmdDb25maWcpXFxcIixcXG5cXHRfcGZfcjUzX3R5cG9sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJOU1xcXCJcXG5cXHRfcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQSBDTkFNRSByZWNvcmQgY2Fubm90IHVzZSB0aGUgbXVsdGl2YWx1ZSBhbnN3ZXIgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJQb2ludCB0aGUgbXVsdGl2YWx1ZSByZWNvcmRzIGF0IEEvQUFBQSAob3IgYW5vdGhlciBzdXBwb3J0ZWQgdHlwZSksIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZWNvcmQgc2V0IG5lZWRzIEFsaWFzVGFyZ2V0IG9yIHRoZSBmdWxsIFRUTCtSZXNvdXJjZVJlY29yZHMgcGFpclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3ZhbHNyY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuIyBUaGUgc2VydmljZSBleHBlY3RzIFxcXCJleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmRcXG4jIFJlc291cmNlUmVjb3Jkc11dXFxcIiAoVHJhZmZpY1BvbGljeUluc3RhbmNlSWQgaGFzIG5vIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5KS5cXG4jIFRoZSBUVEwrQWxpYXNUYXJnZXQgY29tYmluYXRpb24gaXMgYWxyZWFkeSB0aGUgZW5naW5lJ3MgRTMwMjksIHNvIHRoaXMgcnVsZVxcbiMgY292ZXJzIHRoZSByZW1haW5pbmcgc2hhcGVzOiBhbGlhcyBwbHVzIHJlY29yZHMsIGFuZCBhbiBpbmNvbXBsZXRlIG5vbi1hbGlhc1xcbiMgZ3JvdXAgKHJlY29yZHMgd2l0aG91dCBUVEwsIFRUTCB3aXRob3V0IHJlY29yZHMsIG9yIG5laXRoZXIpLlxcbl9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcblxcbl9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKSBpZiB7XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVFRMXFxcIikgIT0gbnVsbFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdFxcXCJBbGlhc1RhcmdldCBhbmQgUmVzb3VyY2VSZWNvcmRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmU7IHRoZSBzZXJ2aWNlIGV4cGVjdHMgZXhhY3RseSBvbmUgb2YgQWxpYXNUYXJnZXQgb3IgVFRMLXBsdXMtUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiS2VlcCB0aGUgQWxpYXNUYXJnZXQgYW5kIGRyb3AgUmVzb3VyY2VSZWNvcmRzLCBvciBtYWtlIGl0IGEgcGxhaW4gcmVjb3JkIHdpdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdF9wZl9yNTNfdmFsc3JjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdFxcXCJBIG5vbi1hbGlhcyByZWNvcmQgc2V0IG5lZWRzIGJvdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHM7IHRoZSBzZXJ2aWNlIHJlamVjdHMgYW4gaW5jb21wbGV0ZSBwYWlyIHdpdGggXFxcXFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmQgUmVzb3VyY2VSZWNvcmRzXV0gLi4uIGZvdW5kIG5vbmVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNwZWNpZnkgVFRMIGFuZCBSZXNvdXJjZVJlY29yZHMgdG9nZXRoZXIsIG9yIHVzZSBBbGlhc1RhcmdldCBpbnN0ZWFkXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRub3QgX3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpXFxufVxcblxcbl9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpIGlmIHtcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBjYW4gdXNlIG9ubHkgb25lIHJvdXRpbmcgcG9saWN5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZW5mb3JjZXMgXFxcIkV4cGVjdGVkIGV4YWN0bHkgb25lIG9mIFtXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsXFxuIyBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgR2VvUHJveGltaXR5TG9jYXRpb24sIG9yIENpZHJSb3V0aW5nQ29uZmlnXVxcXCIuXFxuIyBHZW9Qcm94aW1pdHlMb2NhdGlvbiBpcyBub3QgYSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSwgc28gZml2ZSByZW1haW4gaGVyZS5cXG4jIE11bHRpVmFsdWVBbnN3ZXI6IGZhbHNlIGlzIHRyZWF0ZWQgYXMgYWJzZW50IOKAlCBvbmx5IHRydWUgc2VsZWN0cyB0aGUgcG9saWN5Llxcbl9wZl9yNTNfcG9seF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHByb3ApIGlmIHtcXG5cXHRwcm9wICE9IFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIlxcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG5fcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSkgOj0gcHMgaWYge1xcblxcdHBzIDo9IFtwIHwgc29tZSBwIGluIGFycmF5LmNvbmNhdChfcGZfcjUzX3BvbHhfcHJvcHMsIFtcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJdKTsgX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgcCldXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeSwgYnV0ICV2IGFyZSBhbGwgc3BlY2lmaWVkXFxcIiwgW3BzXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgb2YgV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLCBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgb3IgQ2lkclJvdXRpbmdDb25maWcgYW5kIHNwbGl0IHRoZSByZXN0IGludG8gc2VwYXJhdGUgcmVjb3JkIHNldHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHBzIDo9IF9wZl9yNTNfcG9seF9wb2xpY2llcyhuYW1lKVxcblxcdGNvdW50KHBzKSA+IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNldElkZW50aWZpZXIgYW5kIGEgcm91dGluZyBwb2xpY3kgbXVzdCBhcHBlYXIgdG9nZXRoZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19zaWRwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG5fcGZfcjUzX3NpZHBfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfc2lkcF9wcm9wc1xcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJBIHJvdXRpbmcgcG9saWN5IGlzIGNvbmZpZ3VyZWQgYnV0IFNldElkZW50aWZpZXIgaXMgbWlzc2luZzsgdGhlIENoYW5nZVJlc291cmNlUmVjb3JkU2V0cyBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJNaXNzaW5nIGZpZWxkICdTZXRJZGVudGlmaWVyJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgU2V0SWRlbnRpZmllciB0aGF0IGlzIHVuaXF1ZSBhbW9uZyB0aGUgcmVjb3JkIHNldHMgc2hhcmluZyB0aGlzIE5hbWUgYW5kIFR5cGVcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcblxcdG5vdCBpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiU2V0SWRlbnRpZmllciBpcyBzcGVjaWZpZWQgYnV0IG5vIHJvdXRpbmcgcG9saWN5IGlzOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBmaW5kcyBub25lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFNldElkZW50aWZpZXIgZnJvbSB0aGlzIHNpbXBsZSByZWNvcmQgc2V0LCBvciBhZGQgdGhlIHJvdXRpbmcgcG9saWN5IGl0IHdhcyBtZWFudCBmb3JcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxuXFx0bm90IF9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My10dGwtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRUTCBtdXN0IGZpdCBpbiAzMiBiaXRzICgwLi4yMTQ3NDgzNjQ3IHNlY29uZHMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIGlzIGVuZm9yY2VkOiB0aGUgc2VydmljZSByZWplY3RlZCA5OTk5OTk5OTk5IHdpdGhcXG4jIFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyMTQ3NDgzNjQ3XFxcIi4gTmVnYXRpdmUgVFRMcyBhcmVcXG4jIHVudGVzdGVkLCBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXR0bC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVFRMXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUVEwgbXVzdCBiZSBhdCBtb3N0IDIxNDc0ODM2NDcgc2Vjb25kcywgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFRUTCB0byBhIDMyLWJpdCB2YWx1ZTsgYW55dGhpbmcgYWJvdmUgYSBkYXkgcmFyZWx5IGhlbHBzIGNhY2hpbmcgYW55d2F5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIodClcXG5cXHRuID4gMjE0NzQ4MzY0N1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXZWlnaHQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgMzAwIHdpdGggXFxcIk1lbWJlclxcbiMgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyNTVcXFwiLiBOZWdhdGl2ZSB3ZWlnaHRzIGFyZSB1bnRlc3RlZCxcXG4jIHNvIHRoZXkgYXJlIGRlbGliZXJhdGVseSBub3QgZmxhZ2dlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiLFxcblxcdHNwcmludGYoXFxcIldlaWdodCBtdXN0IGJlIGF0IG1vc3QgMjU1LCBnb3QgJXZcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgV2VpZ2h0IHRvIGEgdmFsdWUgaW4gWzAsIDI1NV07IHdlaWdodHMgYXJlIHJlbGF0aXZlLCBzbyBzY2FsZSB0aGUgZ3JvdXAgZG93biBwcm9wb3J0aW9uYWxseVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHcpXFxuXFx0biA+IDI1NVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIb3N0ZWRab25lTmFtZSBtdXN0IGVuZCB3aXRoIGEgdHJhaWxpbmcgZG90XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24gbG9va3MgdGhlIHpvbmUgdXAgYnkgdGhlIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUgYW5kIGRvZXMgbm90XFxuIyBub3JtYWxpemUgdGhlIHRyYWlsaW5nIGRvdDogdGhlIHNhbWUgc3RhY2sgZGVwbG95ZWQgY2xlYW4gd2l0aFxcbiMgXFxcInpvbmUuZXhhbXBsZS5cXFwiIGFuZCBmYWlsZWQgd2l0aCBOb3RGb3VuZCBmb3IgXFxcInpvbmUuZXhhbXBsZVxcXCIgKDIwMjYtMDktMDIpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My16b25lbmFtZS10cmFpbGluZy1kb3RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIb3N0ZWRab25lTmFtZSAnJXMnIGlzIG1pc3NpbmcgdGhlIHRyYWlsaW5nIGRvdCwgc28gQ2xvdWRGb3JtYXRpb24gZmFpbHMgdGhlIGxvb2t1cCB3aXRoIFxcXFxcXFwiTm8gaG9zdGVkIHpvbmUgd2l0aCBuYW1lIC4uLiBmb3VuZFxcXFxcXFwiXFxcIiwgW3puXSksXFxuXFx0c3ByaW50ZihcXFwiVXNlICclcy4nICh3aXRoIHRoZSB0cmFpbGluZyBkb3QpXFxcIiwgW3puXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0em4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHpuKVxcblxcdHpuICE9IFxcXCJcXFwiXFxuXFx0bm90IGVuZHN3aXRoKHpuLCBcXFwiLlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRyYW5zZmVyIEFjY2VsZXJhdGlvbiByZWplY3RzIGJ1Y2tldCBuYW1lcyB3aXRoIHBlcmlvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGVuZHBvaW50cyBhcmUgRE5TLWJhc2VkLCBzbyBidWNrZXQgbmFtZXMgY29udGFpbmluZ1xcbiMgcGVyaW9kcyBhcmUgcmVqZWN0ZWQgYXQgY3JlYXRpb24uIE9ubHkgYSBsaXRlcmFsIEJ1Y2tldE5hbWUgaXMgY2hlY2thYmxlO1xcbiMgQ0RLLWdlbmVyYXRlZCBuYW1lcyBuZXZlciBjb250YWluIHBlcmlvZHMgYW55d2F5LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCdWNrZXQgbmFtZSAnJXMnIGNvbnRhaW5zIHBlcmlvZHMsIHdoaWNoIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBkb2VzIG5vdCBzdXBwb3J0OyBDcmVhdGVCdWNrZXQgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBidWNrZXRzIHdpdGggcGVyaW9kcyAoLikgaW4gdGhlaXIgbmFtZXNcXFxcXFxcIlxcXCIsIFtibl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGJ1Y2tldCB3aXRob3V0IHBlcmlvZHMsIG9yIGRyb3AgQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS90cmFuc2Zlci1hY2NlbGVyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbi5BY2NlbGVyYXRpb25TdGF0dXNcXFwiKSA9PSBcXFwiRW5hYmxlZFxcXCJcXG5cXHRibiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJ1Y2tldE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhibilcXG5cXHRjb250YWlucyhibiwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0LWxldmVsIGFjdGlvbnMgbmVlZCBhbiBvYmplY3QtbGV2ZWwgUmVzb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQW4gb2JqZWN0LWxldmVsIGFjdGlvbiB3aG9zZSBzdGF0ZW1lbnQgbGlzdHMgb25seSBidWNrZXQtbGV2ZWwgQVJOcyBhcHBsaWVzXFxuIyB0byBub3RoaW5nLCBhbmQgUzMgcmVqZWN0cyB0aGUgcG9saWN5LiBBIGJ1Y2tldC1sZXZlbCBBUk4gaXMgcHJvdmFibGUgdHdvXFxuIyB3YXlzOiBhIGxpdGVyYWwgYXJuOi4uLjpzMzo6Om5hbWUgd2l0aCBubyBcXFwiL1xcXCIgaW4gdGhlIG5hbWUgcGFydCwgb3IgYSB2YWx1ZVxcbiMgdGhhdCByZXNvbHZlKCkgdHVybnMgaW50byB0aGUgbG9naWNhbCBJRCBvZiBhbiBpbi10ZW1wbGF0ZSBidWNrZXQgKFJlZiBhbmRcXG4jIEZuOjpHZXRBdHQgQXJuIGJvdGggZG8g4oCUIHRoZSBHZXRBdHQgb2YgYSBidWNrZXQgaXMgaXRzIGJ1Y2tldCBBUk4pLiBGaXJlc1xcbiMgb25seSB3aGVuIGV2ZXJ5IHJlc291cmNlIGluIHRoZSBzdGF0ZW1lbnQgaXMgcHJvdmFibHkgYnVja2V0LWxldmVsLCBzb1xcbiMgdW5yZXNvbHZhYmxlIGVudHJpZXMgKGUuZy4gRm46OlN1YiBcXFwiJHtCLkFybn0vKlxcXCIpIG11dGUgdGhlIHN0YXRlbWVudC5cXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmdldG9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpwdXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6ZGVsZXRlb2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgbG93ZXIoYSkgaW4ge1xcXCJzMzphYm9ydG11bHRpcGFydHVwbG9hZFxcXCIsIFxcXCJzMzpyZXN0b3Jlb2JqZWN0XFxcIiwgXFxcInMzOmxpc3RtdWx0aXBhcnR1cGxvYWRwYXJ0c1xcXCJ9XFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYgciBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXG5fcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKSBpZiB7XFxuXFx0c3RhcnRzd2l0aChyLCBcXFwiYXJuOlxcXCIpXFxuXFx0Y29udGFpbnMociwgXFxcIjpzMzo6OlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQociwgXFxcIjo6OlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG5cXHRub3QgY29udGFpbnMocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxuX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIGkpIDo9IFthXSBpZiB7XFxuXFx0YSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtpXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBhY3RzIGlmIHtcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0YWN0cyA6PSBbdiB8IHNvbWUgaXQgaW4gaXRlbXM7IHYgOj0gaXQudmFsdWU7IGlzX3N0cmluZyh2KV1cXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gW3JdIGlmIHtcXG5cXHRyIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhyKVxcbn1cXG5cXG5fcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBpKSA6PSBycyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0cnMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2UuJWRcXFwiLCBbaSwgaXQuaW5kZXhdKSk7IGlzX3N0cmluZyh2KV1cXG5cXHRjb3VudChycykgPT0gY291bnQoaXRlbXMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYnVja2V0LXBvbGljeS1hY3Rpb24tcmVzb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3N0LmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQWN0aW9uICclcycgdGFyZ2V0cyBvYmplY3RzIGJ1dCB0aGUgc3RhdGVtZW50J3MgcmVzb3VyY2VzIGFyZSBhbGwgYnVja2V0LWxldmVsIEFSTnM7IFMzIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiQWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIGFueSByZXNvdXJjZShzKSBpbiBzdGF0ZW1lbnRcXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIkFkZCB0aGUgb2JqZWN0IGZvcm0gb2YgdGhlIEFSTiAoYXBwZW5kIC8qIG9yIGEga2V5IHBhdHRlcm4pIHRvIFJlc291cmNlLCBvciBkcm9wIHRoZSBvYmplY3QtbGV2ZWwgYWN0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdHNvbWUgYSBpbiBfcGZfczNicGFyX2FjdGlvbnMobmFtZSwgc3QuaW5kZXgpXFxuXFx0X3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpXFxuXFx0cnMgOj0gX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgc3QuaW5kZXgpXFxuXFx0Y291bnQocnMpID4gMFxcblxcdGV2ZXJ5IHIgaW4gcnMge1xcblxcdFxcdF9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVja2V0IHBvbGljeSBzdGF0ZW1lbnRzIG5lZWQgYSBQcmluY2lwYWxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVzb3VyY2UtYmFzZWQgcG9saWNpZXMgcmVxdWlyZSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgaW4gZXZlcnlcXG4jIHN0YXRlbWVudCDigJQgdW5saWtlIGlkZW50aXR5IHBvbGljaWVzLCB3aGVyZSBjZm4tbGludC1ncmFkZSBjaGVja3MgYXJlXFxuIyB0dW5lZC4gQW4gdW5yZXNvbHZhYmxlIFByaW5jaXBhbCB2YWx1ZSBzdGlsbCBjb3VudHMgYXMgcHJlc2VudC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZFxcXCIsIFtzdC5pbmRleF0pLFxcblxcdFxcXCJUaGUgc3RhdGVtZW50IGhhcyBuZWl0aGVyIFByaW5jaXBhbCBub3IgTm90UHJpbmNpcGFsOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIk1pc3NpbmcgcmVxdWlyZWQgZmllbGQgUHJpbmNpcGFsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgdG8gdGhlIHN0YXRlbWVudCDigJQgYnVja2V0IHBvbGljaWVzIGFsd2F5cyBuYW1lIHdobyB0aGV5IGFwcGx5IHRvXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzdC52YWx1ZSwgXFxcIk5vdFByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpZmVjeWNsZSBhcmNoaXZlIHRyYW5zaXRpb25zIG11c3QgY29tZSAzMCsgZGF5cyBhZnRlciBJQSwgYW5kIGV4cGlyYXRpb24gYWZ0ZXIgZXZlcnkgdHJhbnNpdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Mzb3JkX2ZpeCA6PSBcXFwiT3JkZXIgdGhlIGxpZmVjeWNsZSBkYXlzIHNvIGFyY2hpdmUgdHJhbnNpdGlvbnMgY29tZSBhdCBsZWFzdCAzMCBkYXlzIGFmdGVyIElBIHRyYW5zaXRpb25zIGFuZCBleHBpcmF0aW9uIGNvbWVzIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cXFwiXFxuXFxuX3BmX3Mzb3JkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbGlmZWN5Y2xlLXRyYW5zaXRpb24tZ2VuZXJhbC1jb25zaWRlcmF0aW9ucy5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5UcmFuc2l0aW9uc1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiVHJhbnNpdGlvbiB0byAlcyBhdCAldiBkYXlzIGlzIGxlc3MgdGhhbiAzMCBkYXlzIGFmdGVyIHRoZSAlcyB0cmFuc2l0aW9uIGF0ICV2IGRheXM7IFMzIHJlcXVpcmVzIG9iamVjdHMgdG8gc3RheSBhdCBsZWFzdCAzMCBkYXlzIGluIElBIHN0b3JhZ2VcXFwiLCBbc2MyLCBkMiwgc2MxLCBkMV0pLFxcblxcdF9wZl9zM29yZF9maXgsIF9wZl9zM29yZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdDEgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDEpXFxuXFx0c2MxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzEgaW4ge1xcXCJTVEFOREFSRF9JQVxcXCIsIFxcXCJPTkVaT05FX0lBXFxcIn1cXG5cXHRyYXcxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcxICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZDEgOj0gdG9fbnVtYmVyKHJhdzEpXFxuXFx0c29tZSB0MiBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0MilcXG5cXHRzYzIgOj0gb2JqZWN0LmdldCh0MiwgXFxcIlN0b3JhZ2VDbGFzc1xcXCIsIFxcXCJcXFwiKVxcblxcdHNjMiBpbiB7XFxcIkdMQUNJRVJcXFwiLCBcXFwiREVFUF9BUkNISVZFXFxcIn1cXG5cXHRyYXcyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcyICE9IG51bGxcXG5cXHRkMiA6PSB0b19udW1iZXIocmF3MilcXG5cXHRkMiA8IGQxICsgMzBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgKCV2KSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBUcmFuc2l0aW9uSW5EYXlzICgldik7IFMzIHJlamVjdHMgbGlmZWN5Y2xlIHJ1bGVzIHRoYXQgZXhwaXJlIG9iamVjdHMgYmVmb3JlIG9yIHdoZW4gdGhleSB0cmFuc2l0aW9uXFxcIiwgW2UsIGRdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3ZSA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXdlICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZSA6PSB0b19udW1iZXIocmF3ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdCBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0KVxcblxcdHJhd2QgOj0gb2JqZWN0LmdldCh0LCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZCAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3ZClcXG5cXHRlIDw9IGRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4cGlyYXRpb25JbkRheXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgRXhwaXJhdGlvbkluRGF5cyBhcyBhIGJhcmUgaW50ZWdlciB3aXRoIG5vXFxuIyBtaW5pbXVtLCBzbyAwIGFuZCBuZWdhdGl2ZXMgcmVhY2ggdGhlIHNlcnZpY2UuIE9ubHkgdGhlIEV4cGlyYXRpb24gYWN0aW9uXFxuIyB3YXMgYmVuY2gtdmVyaWZpZWQ7IG90aGVyIGRheSBmaWVsZHMgYXJlIGxlZnQgYWxvbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgaXMgJXY7IFMzIHJlamVjdHMgdGhlIHJ1bGUgd2l0aCBcXFxcXFxcIidEYXlzJyBmb3IgRXhwaXJhdGlvbiBhY3Rpb24gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcXFxcXFxcIlxcXCIsIFtkXSksXFxuXFx0XFxcIlVzZSBhbiBFeHBpcmF0aW9uSW5EYXlzIG9mIDEgb3IgbW9yZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ICE9IG51bGxcXG5cXHRkIDo9IHRvX251bWJlcihyYXcpXFxuXFx0ZCA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBsaWZlY3ljbGUgcnVsZSBuZWVkcyBhdCBsZWFzdCBvbmUgYWN0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB0ZW4gYWN0aW9uIGZpZWxkcywgdmVyYmF0aW0gZnJvbSB0aGUgc2VydmljZSBlcnJvci4gQSBmaWVsZCB3aG9zZSB2YWx1ZVxcbiMgaXMgYW4gdW5yZXNvbHZhYmxlIGludHJpbnNpYyBzdGlsbCBjb3VudHMgYXMgcHJlc2VudCAoZmFpbCBjbG9zZWQpLlxcbl9wZl9zM2xuYV9hY3Rpb25zIDo9IHtcXG5cXHRcXFwiQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkRhdGVcXFwiLFxcblxcdFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIixcXG5cXHRcXFwiRXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlclxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNcXFwiLFxcblxcdFxcXCJUcmFuc2l0aW9uXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvbnNcXFwiLFxcbn1cXG5cXG5fcGZfczNsbmFfaGFzX2FjdGlvbihydWxlKSBpZiB7XFxuXFx0c29tZSBrIGluIF9wZl9zM2xuYV9hY3Rpb25zXFxuXFx0b2JqZWN0LmdldChydWxlLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWRcXFwiLCBbci5pbmRleF0pLFxcblxcdFxcXCJUaGUgbGlmZWN5Y2xlIHJ1bGUgc3BlY2lmaWVzIG5vIGFjdGlvbjsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mIFtFeHBpcmF0aW9uRGF0ZSxFeHBpcmF0aW9uSW5EYXlzLEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZCxUcmFuc2l0aW9uLC4uLl0gbmVlZHMgdG8gYmUgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYW4gZXhwaXJhdGlvbiwgdHJhbnNpdGlvbiwgb3IgYWJvcnQtaW5jb21wbGV0ZS1tdWx0aXBhcnQtdXBsb2FkIGFjdGlvbiB0byB0aGUgcnVsZSwgb3IgcmVtb3ZlIHRoZSBydWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtcnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdG5vdCBfcGZfczNsbmFfaGFzX2FjdGlvbihyLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW5vdGlmaWNhdGlvbi1vdmVybGFwcGluZy1maWx0ZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm90aWZpY2F0aW9uIGVudHJpZXMgbXVzdCBub3Qgb3ZlcmxhcCBmb3IgdGhlIHNhbWUgZXZlbnQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTMyBrZWVwcyBvbmUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gcGVyIGJ1Y2tldCBhbmQgcmVqZWN0cyBpdCB3aGVuIHR3b1xcbiMgZW50cmllcyAoYWNyb3NzIHF1ZXVlL3RvcGljL2xhbWJkYSBhbGlrZSkgY291bGQgbWF0Y2ggdGhlIHNhbWUgb2JqZWN0IGV2ZW50OlxcbiMgb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgQU5EIG92ZXJsYXBwaW5nIHByZWZpeGVzIEFORCBvdmVybGFwcGluZyBzdWZmaXhlcy5cXG4jIEEgbWlzc2luZyBmaWx0ZXIgc2lkZSBtZWFucyBcXFwiXFxcIiBhbmQgb3ZlcmxhcHMgZXZlcnl0aGluZy4gUGFpcnMgd2l0aCBhblxcbiMgdW5yZXNvbHZhYmxlIGV2ZW50IG9yIGZpbHRlciB2YWx1ZSBhcmUgc2tpcHBlZCDigJQgb3ZlcmxhcCBjYW5ub3QgYmUgcHJvdmVuLlxcblxcbl9wZl9zM25vX2NvbmZpZ3MobmFtZSkgOj0gYXJyYXkuY29uY2F0KGFycmF5LmNvbmNhdChcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5RdWV1ZUNvbmZpZ3VyYXRpb25zXFxcIildLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLlRvcGljQ29uZmlndXJhdGlvbnNcXFwiKV0pLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLkxhbWJkYUNvbmZpZ3VyYXRpb25zXFxcIildKVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IHJ1bGVzIGlmIHtcXG5cXHRmIDo9IG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGYpXFxuXFx0ayA6PSBvYmplY3QuZ2V0KGYsIFxcXCJTM0tleVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGspXFxuXFx0cnVsZXMgOj0gb2JqZWN0LmdldChrLCBcXFwiUnVsZXNcXFwiLCBbXSlcXG5cXHRpc19hcnJheShydWxlcylcXG59XFxuXFxuX3BmX3Mzbm9fcnVsZXMoYykgOj0gW10gaWYge1xcblxcdG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSB2IGlmIHtcXG5cXHR2cyA6PSBbeCB8IHNvbWUgciBpbiBfcGZfczNub19ydWxlcyhjKTsgaXNfb2JqZWN0KHIpOyBsb3dlcihvYmplY3QuZ2V0KHIsIFxcXCJOYW1lXFxcIiwgXFxcIlxcXCIpKSA9PSBraW5kOyB4IDo9IG9iamVjdC5nZXQociwgXFxcIlZhbHVlXFxcIiwgbnVsbCldXFxuXFx0Y291bnQodnMpID4gMFxcblxcdHYgOj0gdnNbMF1cXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSBcXFwiXFxcIiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA9PSAwXFxufVxcblxcbl9wZl9zM25vX3ByZV9vdmVybGFwKGEsIGIpIGlmIHN0YXJ0c3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGIsIGEpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19zdWZfb3ZlcmxhcChhLCBiKSBpZiBlbmRzd2l0aChiLCBhKVxcblxcbiMgXFxcInMzOk9iamVjdENyZWF0ZWQ6KlxcXCIgY292ZXJzIFxcXCJzMzpPYmplY3RDcmVhdGVkOlB1dFxcXCI7IGRyb3AgdGhlIHRyYWlsaW5nIFxcXCIqXFxcIlxcbiMgYW5kIHByZWZpeC1tYXRjaC5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYgZTEgPT0gZTJcXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUxLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTIsIHN1YnN0cmluZyhlMSwgMCwgY291bnQoZTEpIC0gMSkpXFxufVxcblxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiB7XFxuXFx0ZW5kc3dpdGgoZTIsIFxcXCI6KlxcXCIpXFxuXFx0c3RhcnRzd2l0aChlMSwgc3Vic3RyaW5nKGUyLCAwLCBjb3VudChlMikgLSAxKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHdvIG5vdGlmaWNhdGlvbiBlbnRyaWVzIGZvciBvdmVybGFwcGluZyBldmVudCB0eXBlcyAoJyVzJyBhbmQgJyVzJykgaGF2ZSBvdmVybGFwcGluZyBwcmVmaXgvc3VmZml4IGZpbHRlcnM7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkNvbmZpZ3VyYXRpb24gaXMgYW1iaWd1b3VzbHkgZGVmaW5lZC4gQ2Fubm90IGhhdmUgb3ZlcmxhcHBpbmcgc3VmZml4ZXMgaW4gdHdvIHJ1bGVzIGlmIHRoZSBwcmVmaXhlcyBhcmUgb3ZlcmxhcHBpbmcgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGUuXFxcXFxcXCJcXFwiLCBbZTEsIGUyXSksXFxuXFx0XFxcIk1ha2UgdGhlIHByZWZpeGVzIG9yIHN1ZmZpeGVzIGRpc2pvaW50LCBvciBtZXJnZSB0aGUgdHdvIGVudHJpZXMgaW50byBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9ub3RpZmljYXRpb24taG93LXRvLWZpbHRlcmluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRjcyA6PSBfcGZfczNub19jb25maWdzKG5hbWUpXFxuXFx0c29tZSBpLCBhIGluIGNzXFxuXFx0c29tZSBqLCBiIGluIGNzXFxuXFx0aSA8IGpcXG5cXHRlMSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUxKVxcblxcdGUyIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkV2ZW50XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZTIpXFxuXFx0X3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpXFxuXFx0cDEgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChhLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDEpXFxuXFx0cDIgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChiLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDIpXFxuXFx0X3BmX3Mzbm9fcHJlX292ZXJsYXAocDEsIHAyKVxcblxcdHMxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMxKVxcblxcdHMyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMyKVxcblxcdF9wZl9zM25vX3N1Zl9vdmVybGFwKHMxLCBzMilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBuZWVkcyB2ZXJzaW9uaW5nIGVuYWJsZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gb24gaXRzIG93biBkb2VzIE5PVCByZXF1aXJlIE9iamVjdExvY2tFbmFibGVkIOKAlFxcbiMgUzMgYWNjZXB0cyBPYmplY3QgTG9jayBvbiBhbiBleGlzdGluZyB2ZXJzaW9uZWQgYnVja2V0IChiZW5jaCBzMDViIGRlcGxveWVkXFxuIyBjbGVhbikuIFdoYXQgaXQgZG9lcyByZXF1aXJlIGlzIHZlcnNpb25pbmcuIFdoZW4gT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZVxcbiMgdGhlIGJ1Y2tldCBpcyBjcmVhdGVkIGxvY2stZW5hYmxlZCBhbmQgdmVyc2lvbmluZyBjb21lcyB3aXRoIGl0LCBzbyB0aGUgcnVsZVxcbiMgZmlyZXMgb25seSB3aGVuIGxvY2stZW5hYmxlbWVudCBpcyBwcm92YWJseSBvZmYgKGtleSBsaXRlcmFsbHkgYWJzZW50IG9yXFxuIyBsaXRlcmFsIGZhbHNlKSBhbmQgdmVyc2lvbmluZyBpcyBwcm92YWJseSBub3QgZW5hYmxlZC5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk9iamVjdExvY2tFbmFibGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSBmYWxzZVxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gaXMgc2V0IG9uIGEgYnVja2V0IHdob3NlIHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlZlcnNpb25pbmcgbXVzdCBiZSAnRW5hYmxlZCcgb24gdGhlIGJ1Y2tldCB0byBhcHBseSBhIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb25cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnLCBvciBzZXQgT2JqZWN0TG9ja0VuYWJsZWQ6IHRydWUgdG8gY3JlYXRlIHRoZSBidWNrZXQgbG9jay1lbmFibGVkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXHRfcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKVxcblxcdF9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0IExvY2sgZm9yYmlkcyBzdXNwZW5kaW5nIHZlcnNpb25pbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0IExvY2sgZm9yY2UtZW5hYmxlcyB2ZXJzaW9uaW5nIGF0IGNyZWF0aW9uLCBzbyBhIHRlbXBsYXRlIHRoYXQgYWxzb1xcbiMgc3VzcGVuZHMgdmVyc2lvbmluZyBjb250cmFkaWN0cyBpdHNlbGYgYW5kIHRoZSBoYW5kbGVyJ3MgUHV0QnVja2V0VmVyc2lvbmluZ1xcbiMgY2FsbCBpcyByZWplY3RlZC4gRmlyZXMgb25seSBvbiBhIGxpdGVyYWwgXFxcIlN1c3BlbmRlZFxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiLFxcblxcdFxcXCJPYmplY3RMb2NrRW5hYmxlZCBpcyB0cnVlIGJ1dCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiBzdXNwZW5kcyB2ZXJzaW9uaW5nOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJBbiBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgb24gdGhpcyBidWNrZXQsIHNvIHRoZSB2ZXJzaW9uaW5nIHN0YXRlIGNhbm5vdCBiZSBjaGFuZ2VkLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgKG9yIGRyb3AgaXQg4oCUIE9iamVjdCBMb2NrIGVuYWJsZXMgdmVyc2lvbmluZyBpdHNlbGYpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSB0cnVlXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLWRlc3QtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSByZXBsaWNhdGlvbiBkZXN0aW5hdGlvbiBidWNrZXQgbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBkZXN0aW5hdGlvbiBzaWRlIG9mIHdoYXQgcGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZyBjaGVja3Mgb25cXG4jIHRoZSBzb3VyY2UuIERlc3RpbmF0aW9uLkJ1Y2tldCBpcyBub3JtYWxseSBGbjo6R2V0QXR0L1JlZiB0byBhbiBpbi10ZW1wbGF0ZVxcbiMgYnVja2V0OyByZXNvbHZlKCkgdHVybnMgYm90aCBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELCBzbyB0aGVcXG4jIGRlc3RpbmF0aW9uJ3Mgb3duIHByb3BlcnRpZXMgYXJlIHJlYWRhYmxlLiBFeHRlcm5hbCBkZXN0aW5hdGlvbiBBUk5zIHJlc29sdmVcXG4jIHRvIHN0cmluZ3MgdGhhdCBhcmUgbm90IGxvZ2ljYWwgSURzIGFuZCBza2lwLiBWZXJzaW9uaW5nIGlzIFxcXCJub3QgZW5hYmxlZFxcXCJcXG4jIHdoZW4gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gaXMgbGl0ZXJhbGx5IGFic2VudCAocHJvdmVuIHZpYVxcbiMgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKSBvciBTdGF0dXMgcmVzb2x2ZXMgdG8gXFxcIlN1c3BlbmRlZFxcXCI7IGFuXFxuIyB1bnJlc29sdmFibGUgU3RhdHVzIHNraXBzLlxcbl9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW2Rlc3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHJlc29sdmUoZGVzdCwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiUmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0ICclcycgZG9lcyBub3QgaGF2ZSB2ZXJzaW9uaW5nIGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkRlc3RpbmF0aW9uIGJ1Y2tldCBtdXN0IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkXFxcXFxcXCJcXFwiLCBbZGVzdF0pLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyBvbiB0aGUgZGVzdGluYXRpb24gYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRkZXN0IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRGVzdGluYXRpb24uQnVja2V0XFxcIiwgW3IuaW5kZXhdKSlcXG5cXHRpc19zdHJpbmcoZGVzdClcXG5cXHRkZXN0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdF9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdmVyc2lvbmluZyB0byBiZSBlbmFibGVkIG9uIHRoZSBzb3VyY2UgYnVja2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOmBleWPjeOBq+OBmeOCi+OBruOBryBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiDjgYzmloflrZfjganjgYrjgorkuI3lnKjvvIhpbnB1dC5yZXNvdXJjZXMg44GnXFxuIyDoqLzmmI7jgIFBR0VOVFMubWQg5Y+C54Wn77yJ44GL44CBU3RhdHVzIOOBjOODquODhuODqeODq+OBpyBcXFwiU3VzcGVuZGVkXFxcIiDjga7jgajjgY3jgaDjgZHjgIJcXG4jIOacquino+axuuODiOODvOOCr+ODs+OBryBPSyDmibHjgYTvvIhyZXNvbHZlKCkg44Gv44Kt44O85LiN5Zyo44Go5pyq6Kej5rG644Gu5Lih5pa544GnIHVuZGVmaW5lZCDjgatcXG4jIOOBquOCi+OBn+OCgeOAgWBub3QgcmVzb2x2ZSguLi4pYCDjgafjga/kuI3lnKjjgpLoqLzmmI7jgafjgY3jgarjgYQg4oCUIDIwMjYtMDktMDIg5a6f5ris77yJ44CCXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIGlzIHNldCBidXQgYnVja2V0IHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYXQgZGVwbG95IHRpbWUgKEludmFsaWRSZXF1ZXN0OiBWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQpXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIHNvdXJjZSBidWNrZXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9yZXBsaWNhdGlvbi1yZXF1aXJlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIHdlYnNpdGUgc2V0dGluZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gcmVkaXJlY3RzIHRoZSB3aG9sZSBzaXRlLCBzbyBTMyByZWplY3RzIGFueSBzaWJsaW5nXFxuIyB3ZWJzaXRlIHNldHRpbmcgYWxvbmdzaWRlIGl0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtd2Vic2l0ZS1yZWRpcmVjdC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIldlYnNpdGVDb25maWd1cmF0aW9uIGNvbWJpbmVzIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyB3aXRoICVzOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJbSW5kZXhEb2N1bWVudCwgRXJyb3JEb2N1bWVudCwgUm91dGluZ1J1bGVzXSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBpZiBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBba10pLFxcblxcdFxcXCJLZWVwIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyBhbG9uZSwgb3IgZHJvcCBpdCBhbmQgY29uZmlndXJlIHRoZSB3ZWJzaXRlIHdpdGggSW5kZXhEb2N1bWVudC9FcnJvckRvY3VtZW50L1JvdXRpbmdSdWxlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXdlYnNpdGVjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHdjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb25cXFwiKVxcblxcdGlzX29iamVjdCh3YylcXG5cXHRvYmplY3QuZ2V0KHdjLCBcXFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHNvbWUgayBpbiB7XFxcIkluZGV4RG9jdW1lbnRcXFwiLCBcXFwiRXJyb3JEb2N1bWVudFxcXCIsIFxcXCJSb3V0aW5nUnVsZXNcXFwifVxcblxcdG9iamVjdC5nZXQod2MsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic2NoZWR1bGVyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZMRVhJQkxFIG1vZGUgbmVlZHMgTWF4aW11bVdpbmRvd0luTWludXRlcywgT0ZGIGZvcmJpZHMgaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zY2hmd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtc2NoZWR1bGVyLXNjaGVkdWxlLWZsZXhpYmxldGltZXdpbmRvdy5odG1sXFxcIlxcblxcbl9wZl9zY2hmd19mdHcobmFtZSkgOj0gZnR3IGlmIHtcXG5cXHRmdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3dcXFwiKVxcblxcdGlzX29iamVjdChmdHcpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93Lk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLFxcblxcdFxcXCJGbGV4aWJsZVRpbWVXaW5kb3cuTW9kZSBpcyBGTEVYSUJMRSBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBtaXNzaW5nOyBDcmVhdGVTY2hlZHVsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWF4aW11bVdpbmRvd0luTWludXRlcyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gRkxFWElCTEVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBNYXhpbXVtV2luZG93SW5NaW51dGVzICgxLTE0NDApLCBvciBzd2l0Y2ggTW9kZSB0byBPRkZcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiRkxFWElCTEVcXFwiXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgT0ZGIGJ1dCBNYXhpbXVtV2luZG93SW5NaW51dGVzIGlzIHNldDsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBub3QgYmUgcHJvdmlkZWQgd2hlbiBGbGV4aWJsZVRpbWVXaW5kb3dNb2RlIGlzIHNldCB0byBPRkZcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgTWF4aW11bVdpbmRvd0luTWludXRlcywgb3Igc3dpdGNoIE1vZGUgdG8gRkxFWElCTEVcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiT0ZGXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFNjaGVkdWxlciByYXRlKCkgdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMjcgdmFsaWRhdGVzIHJhdGUoKSBib3VuZHMgZm9yIEFXUzo6RXZlbnRzOjpSdWxlIGJ1dCBub3RcXG4jIGZvciBBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGUg4oCUIHNhbWUgY29uc3RyYWludCBmYW1pbHksIGRpZmZlcmVudCByZXNvdXJjZS5cXG4jIE9ubHkgdGhlIHZhbHVlIGJvdW5kIGlzIGNoZWNrZWQgaGVyZTsgdW5pdCBzcGVsbGluZ3MgZGlmZmVyIGJldHdlZW4gdGhlIHR3b1xcbiMgc2VydmljZXMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIGZvciBTY2hlZHVsZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZWR1bGVFeHByZXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcmF0ZSB2YWx1ZSBpbiAnJXMnIGlzIG5vdCBwb3NpdGl2ZTsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgU2NoZWR1bGUgRXhwcmVzc2lvbiAlcy5cXFxcXFxcIlxcXCIsIFtleHByLCBleHByXSksXFxuXFx0XFxcIlVzZSBhIHJhdGUgb2YgMSBvciBtb3JlIChlLmcuIHJhdGUoNSBtaW51dGVzKSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2NoZWR1bGVyL2xhdGVzdC9Vc2VyR3VpZGUvc2NoZWR1bGUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZXhwciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKGV4cHIpXFxuXFx0dCA6PSB0cmltX3NwYWNlKGV4cHIpXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwicmF0ZShcXFwiKVxcblxcdGVuZHN3aXRoKHQsIFxcXCIpXFxcIilcXG5cXHRpbm5lciA6PSB0cmltX3NwYWNlKHN1YnN0cmluZyh0LCA1LCBjb3VudCh0KSAtIDYpKVxcblxcdHBhcnRzIDo9IHNwbGl0KGlubmVyLCBcXFwiIFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocGFydHNbMF0pXFxuXFx0biA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGSUZPIHRvcGljIG5hbWVzIG11c3QgZW5kIHdpdGggJy5maWZvJyAoYW5kICcuZmlmbycgbmFtZXMgcmVxdWlyZSBGaWZvVG9waWMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZmlmb19maXggOj0gXFxcIkdpdmUgRklGTyB0b3BpY3MgYSBUb3BpY05hbWUgZW5kaW5nIGluICcuZmlmbycgKG9yIGRyb3AgVG9waWNOYW1lIHRvIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmUpLCBhbmQgc2V0IEZpZm9Ub3BpYzogdHJ1ZSB3aGVuZXZlciB0aGUgbmFtZSBlbmRzIGluICcuZmlmbydcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtY3JlYXRlLWZpZm8tdG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZmlmb190cnVlKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIEZpZm9Ub3BpYyDjgYzlrZjlnKjjgZfjgIHjg6rjg4bjg6njg6sgZmFsc2Ug5Lul5aSW77yIdHJ1ZSDjgoTjg4jjg7zjgq/jg7PvvInjgarjgonjgIxGSUZPIOOBi+OCguOBl+OCjOOBquOBhOOAjeaJseOBhFxcbl9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSkgaWYge1xcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKVxcblxcdG5vdCB2IGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby10b3BpYy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkZpZm9Ub3BpYyBpcyB0cnVlIGJ1dCBUb3BpY05hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLmZpZm8nOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRfcGZfc25zZmlmb190cnVlKG5hbWUpXFxuXFx0dG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh0bilcXG5cXHRub3QgZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBlbmRzIHdpdGggJy5maWZvJyBidXQgRmlmb1RvcGljIGlzIG5vdCB0cnVlOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgbmFtZSBhdCBkZXBsb3kgdGltZVxcXCIsIFt0bl0pLFxcblxcdF9wZl9zbnNmaWZvX2ZpeCwgX3BmX3Nuc2ZpZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0ZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxuXFx0bm90IF9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFTTCBOZXh0L0RlZmF1bHQvQ2hvaWNlcyBtdXN0IHJlZmVyZW5jZSBhIGRlZmluZWQgc3RhdGUgKHRvcC1sZXZlbCBzdGF0ZXM7IGEgZGFuZ2xpbmcgU3RhcnRBdCBpcyBjb3ZlcmVkIGJ5IGVuZ2luZSBydWxlIEUzNjAxKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuX2ZpeCA6PSBcXFwiUG9pbnQgTmV4dC9EZWZhdWx0L0Nob2ljZXMgYXQgYW4gZXhpc3Rpbmcgc3RhdGUgbmFtZVxcXCJcXG5cXG5fcGZfc2ZuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9hbWF6b24tc3RhdGVzLWxhbmd1YWdlLXN0YXRlcy5odG1sXFxcIlxcblxcbl9wZl9zZm5fYXNsKG5hbWUpIDo9IGFzbCBpZiB7XFxuXFx0ZGVmIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZ1xcXCIpXFxuXFx0aXNfc3RyaW5nKGRlZilcXG5cXHRhc2wgOj0ganNvbi51bm1hcnNoYWwoZGVmKVxcblxcdGlzX29iamVjdChhc2wpXFxufVxcblxcbl9wZl9zZm5fZGVmaW5lZChhc2wpIDo9IHtzbiB8IHNvbWUgc24sIF8gaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSl9XFxuXFxuIyBOT1RFOiBhIGRhbmdsaW5nIFN0YXJ0QXQgaXMgZGVsaWJlcmF0ZWx5IE5PVCBjaGVja2VkIGhlcmUg4oCUIHRoZSBlbmdpbmUnc1xcbiMgYnVpbHQtaW4gcnVsZSBFMzYwMSAoRVJST1IvQ0ZOX0xJTlQpIGFscmVhZHkgY292ZXJzIGl0LiBWZXJpZmllZCBhZ2FpbnN0XFxuIyBAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIDEuNy4wLWJldGEgb24gMjAyNi0wOS0wMTogRTM2MDEgZmlyZXMgZm9yXFxuIyBTdGFydEF0IG9ubHkgYW5kIGRvZXMgbm90IGNoZWNrIE5leHQvRGVmYXVsdC9DaG9pY2VzLCB3aGljaCBpcyB3aGF0IHRoaXNcXG4jIHJ1bGUgYWRkcy5cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZ1xcXCIsXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyByZWZlcmVuY2VzIHN0YXRlICclcycgdmlhICVzLCBidXQgbm8gc3RhdGUgd2l0aCB0aGF0IG5hbWUgaXMgZGVmaW5lZFxcXCIsIFtzbmFtZSwgdGFyZ2V0LCBrZXldKSxcXG5cXHRfcGZfc2ZuX2ZpeCwgX3BmX3Nmbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3Nmbl9hc2wobmFtZSlcXG5cXHRzb21lIHNuYW1lLCBzdCBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzdClcXG5cXHRzb21lIGtleSBpbiB7XFxcIk5leHRcXFwiLCBcXFwiRGVmYXVsdFxcXCJ9XFxuXFx0dGFyZ2V0IDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdG5vdCB0YXJnZXQgaW4gX3BmX3Nmbl9kZWZpbmVkKGFzbClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgaGFzIGEgQ2hvaWNlIHJ1bGUgcmVmZXJlbmNpbmcgc3RhdGUgJyVzJywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWRcXFwiLCBbc25hbWUsIHRhcmdldF0pLFxcblxcdF9wZl9zZm5fZml4LCBfcGZfc2ZuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdGFzbCA6PSBfcGZfc2ZuX2FzbChuYW1lKVxcblxcdHNvbWUgc25hbWUsIHN0IGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHN0KVxcblxcdGNob2ljZXMgOj0gb2JqZWN0LmdldChzdCwgXFxcIkNob2ljZXNcXFwiLCBbXSlcXG5cXHRpc19hcnJheShjaG9pY2VzKVxcblxcdHNvbWUgYyBpbiBjaG9pY2VzXFxuXFx0aXNfb2JqZWN0KGMpXFxuXFx0dGFyZ2V0IDo9IG9iamVjdC5nZXQoYywgXFxcIk5leHRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh0YXJnZXQpXFxuXFx0bm90IHRhcmdldCBpbiBfcGZfc2ZuX2RlZmluZWQoYXNsKVxcbn1cXG5cIlxuICB9XG5dO1xuIl19
1932
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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QUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwwQkFBMEI7U0FDM0I7UUFDRCxNQUFNLEVBQUUseW1EQUF5bUQ7S0FDbG5EO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsNEJBQTRCO1FBQ2xDLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwyQ0FBMkM7UUFDcEQsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsMEJBQTBCO1NBQzNCO1FBQ0QsTUFBTSxFQUFFLGtqQ0FBa2pDO0tBQzNqQztJQUNEO1FBQ0UsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixTQUFTLEVBQUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsOEVBQThFO1FBQ3ZGLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLGlCQUFpQjtTQUNsQjtRQUNELE1BQU0sRUFBRSw2K0NBQTYrQztLQUN0L0M7SUFDRDtRQUNFLElBQUksRUFBRSwwQkFBMEI7UUFDaEMsU0FBUyxFQUFFLGVBQWU7UUFDMUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGdJQUFnSTtRQUN6SSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixrQ0FBa0M7U0FDbkM7UUFDRCxNQUFNLEVBQUUsMitEQUEyK0Q7S0FDcC9EO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBzY3JpcHRzL2J1bmRsZS1ydWxlcy50cyBmcm9tIHJ1bGVzLyoqLiBEbyBub3QgZWRpdCBieSBoYW5kLlxuLy8gfn4gUmVnZW5lcmF0ZSB3aXRoOiBucHggcHJvamVuIGJ1bmRsZS1ydWxlc1xuLyogZXNsaW50LWRpc2FibGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlZFJ1bGVEYXRhIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eTogc3RyaW5nO1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICByZWFkb25seSB1cHN0cmVhbTogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZVR5cGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVnbzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQlVORExFRF9SVUxFUzogQnVuZGxlZFJ1bGVEYXRhW10gPSBbXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctYWNjZXNzLWxvZy1mb3JtYXQtcmVxdWVzdC1pZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWNjZXNzIGxvZyBmb3JtYXQgbXVzdCBpbmNsdWRlIGEgcmVxdWVzdCBpZCB2YXJpYWJsZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGZvcm1hdCBzdHJpbmcgaXMgb3BhcXVlIHRvIGV2ZXJ5IHNjaGVtYSBsYXllcjsgdGhlIHNlcnZpY2UgcmVxdWlyZXMgYVxcbiMgcmVxdWVzdCBpZCB2YXJpYWJsZSBzb21ld2hlcmUgaW5zaWRlIGl0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctYWNjZXNzLWxvZy1mb3JtYXQtcmVxdWVzdC1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWNjZXNzTG9nU2V0dGluZy5Gb3JtYXRcXFwiLFxcblxcdFxcXCJBY2Nlc3MgbG9nIGZvcm1hdCBoYXMgbm8gcmVxdWVzdCBpZCB2YXJpYWJsZTsgdGhlIHN0YWdlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQWNjZXNzIExvZyBmb3JtYXQgbXVzdCBpbmNsdWRlIGVpdGhlciAkY29udGV4dC5yZXF1ZXN0SWQgb3IgJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCAkY29udGV4dC5yZXF1ZXN0SWQgKG9yICRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkKSB0byB0aGUgYWNjZXNzIGxvZyBmb3JtYXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2V0LXVwLWxvZ2dpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcXFwiKVxcblxcdGZtdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc0xvZ1NldHRpbmcuRm9ybWF0XFxcIilcXG5cXHRpc19zdHJpbmcoZm10KVxcblxcdG5vdCBjb250YWlucyhmbXQsIFxcXCIkY29udGV4dC5yZXF1ZXN0SWRcXFwiKVxcblxcdG5vdCBjb250YWlucyhmbXQsIFxcXCIkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctYXV0aG9yaXplci10dGwtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHMgdG9wcyBvdXQgYXQgMzYwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIHRoZSBUVEwgYXMgYSBiYXJlIGludGVnZXI7IHRoZSAzNjAwIGNlaWxpbmcgaXNcXG4jIG9ubHkgaW4gdGhlIHNlcnZpY2UuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1hdXRob3JpemVyLXR0bC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kcyAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQXV0aG9yaXplciByZXN1bHQgVFRMIG91dHNpZGUgYWxsb3dhYmxlIHJhbmdlLiBUVEwgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kcy5cXFxcXFxcIlxcXCIsIFt0dGxdKSxcXG5cXHRcXFwiVXNlIGEgVFRMIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHR0bCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzXFxcIikpXFxuXFx0dHRsID4gMzYwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LWNvZ25pdG8tYXV0aG9yaXplci1wcm92aWRlci1hcm5zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDT0dOSVRPX1VTRVJfUE9PTFMgYXV0aG9yaXplcnMgbmVlZCBQcm92aWRlckFSTnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBDb2duaXRvIGF1dGhvcml6ZXIgdmFsaWRhdGVzIHRva2VucyBhZ2FpbnN0IHRoZSB1c2VyIHBvb2xzIGxpc3RlZCBpblxcbiMgUHJvdmlkZXJBUk5zOyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gQWJzZW5jZSBpcyBwcm92ZW5cXG4jIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ2NwYV9taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUHJvdmlkZXJBUk5zXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWNvZ25pdG8tYXV0aG9yaXplci1wcm92aWRlci1hcm5zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm92aWRlckFSTnNcXFwiLFxcblxcdFxcXCJDT0dOSVRPX1VTRVJfUE9PTFMgYXV0aG9yaXplciBoYXMgbm8gUHJvdmlkZXJBUk5zOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3ZpZGVyQVJOcyBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBQcm92aWRlckFSTnMgdG8gdGhlIENvZ25pdG8gdXNlciBwb29sIEFSTihzKSB0aGlzIGF1dGhvcml6ZXIgc2hvdWxkIHVzZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ09HTklUT19VU0VSX1BPT0xTXFxcIlxcblxcdF9wZl9hcGdjcGFfbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LWRlcGxveW1lbnQtbm8tbWV0aG9kc1wiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBEZXBsb3ltZW50IG5lZWRzIGF0IGxlYXN0IG9uZSBNZXRob2Qgb24gaXRzIFJFU1QgQVBJXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkRlcGxveW1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIERlcGxveWluZyBhbiBBUEkgd2l0aCB6ZXJvIG1ldGhvZHMgZmFpbHMuIEp1ZGdlZCBvbmx5IHdoZW4gdGhlIHdob2xlXFxuIyBwaWN0dXJlIGlzIGluIHRoaXMgdGVtcGxhdGU6IHRoZSBhcGkgaXMgYSBzaWJsaW5nIHJlc291cmNlIGFuZCBpdCBoYXMgbm9cXG4jIE9wZW5BUEkgYm9keSAod2hpY2ggd291bGQgZGVmaW5lIG1ldGhvZHMgaW52aXNpYmx5KS4gQWJzZW5jZSBpcyBwcm92ZW5cXG4jIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ2RubV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9hcGdkbm1fc2VydmVkKGFwaSkgaWYge1xcblxcdHNvbWUgbSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcXFwiKVxcblxcdHJlc29sdmUobSwgXFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIikgPT0gYXBpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctZGVwbG95bWVudC1uby1tZXRob2RzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIlJFU1QgQVBJICclcycgaGFzIG5vIEFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kIGluIHRoaXMgdGVtcGxhdGU7IHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgUkVTVCBBUEkgZG9lc24ndCBjb250YWluIGFueSBtZXRob2RzXFxcXFxcXCJcXFwiLCBbYXBpXSksXFxuXFx0XFxcIkFkZCBhdCBsZWFzdCBvbmUgQVdTOjpBcGlHYXRld2F5OjpNZXRob2QgdG8gdGhlIEFQSSBiZWZvcmUgZGVwbG95aW5nIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1kZXBsb3ltZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkRlcGxveW1lbnRcXFwiKVxcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OlJlc3RBcGlcXFwiKVxcblxcdF9wZl9hcGdkbm1fYWJzZW50KGFwaSwgXFxcIkJvZHlcXFwiKVxcblxcdF9wZl9hcGdkbm1fYWJzZW50KGFwaSwgXFxcIkJvZHlTM0xvY2F0aW9uXFxcIilcXG5cXHRub3QgX3BmX2FwZ2RubV9zZXJ2ZWQoYXBpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LWludGVncmF0aW9uLWh0dHAtbWV0aG9kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOb24tTU9DSyBpbnRlZ3JhdGlvbnMgbmVlZCBJbnRlZ3JhdGlvbkh0dHBNZXRob2RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSBpbnRlZ3JhdGlvbiB0eXBlIGV4Y2VwdCBNT0NLIGNhbGxzIGEgYmFja2VuZCBhbmQgbmVlZHMgdGhlIEhUVFBcXG4jIG1ldGhvZCB0byBjYWxsIGl0IHdpdGguIFZlcmlmaWVkIGZvciBhbGwgZm91ciBub24tTU9DSyB0eXBlcy4gQWJzZW5jZSBpc1xcbiMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ2lobV90eXBlcyA6PSB7XFxcIkFXU1xcXCIsIFxcXCJBV1NfUFJPWFlcXFwiLCBcXFwiSFRUUFxcXCIsIFxcXCJIVFRQX1BST1hZXFxcIn1cXG5cXG5fcGZfYXBnaWhtX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGludGVnIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJJbnRlZ3JhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChpbnRlZylcXG5cXHRvYmplY3QuZ2V0KGludGVnLCBcXFwiSW50ZWdyYXRpb25IdHRwTWV0aG9kXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWludGVncmF0aW9uLWh0dHAtbWV0aG9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbnRlZ3JhdGlvbi5JbnRlZ3JhdGlvbkh0dHBNZXRob2RcXFwiLFxcblxcdHNwcmludGYoXFxcIkludGVncmF0aW9uIHR5cGUgJyVzJyBoYXMgbm8gSW50ZWdyYXRpb25IdHRwTWV0aG9kOyB0aGUgbWV0aG9kIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiRW51bWVyYXRpb24gdmFsdWUgZm9yIEh0dHBNZXRob2QgbXVzdCBiZSBub24tZW1wdHlcXFxcXFxcIlxcXCIsIFt0XSksXFxuXFx0XFxcIlNldCBJbnRlZ3JhdGlvbi5JbnRlZ3JhdGlvbkh0dHBNZXRob2QgKFBPU1QgZm9yIEFXUy9BV1NfUFJPWFkgTGFtYmRhIGJhY2tlbmRzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uLlR5cGVcXFwiKVxcblxcdHQgaW4gX3BmX2FwZ2lobV90eXBlc1xcblxcdF9wZl9hcGdpaG1fbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LW1ldGhvZC1hdXRob3JpemVyLWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDVVNUT00gYW5kIENPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemF0aW9uIG5lZWQgQXV0aG9yaXplcklkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBhdXRob3JpemVyLWJhY2tlZCBhdXRob3JpemF0aW9uIHR5cGVzIHBvaW50IGF0IGFuIEF1dGhvcml6ZXI7IHRoZVxcbiMgbWV0aG9kIGNyZWF0ZSByZWplY3RzIHRoZW0gd2l0aG91dCBvbmUuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGdtYWlkX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJBdXRob3JpemVySWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctbWV0aG9kLWF1dGhvcml6ZXItaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQXV0aG9yaXphdGlvblR5cGUgJyVzJyBpcyBzZXQgYnV0IEF1dGhvcml6ZXJJZCBpcyBub3Q7IHRoZSBtZXRob2QgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGF1dGhvcml6ZXIgSUQgc3BlY2lmaWVkLiBTZXR0aW5nIHRoZSBhdXRob3JpemF0aW9uIHR5cGUgdG8gQ1VTVE9NIG9yIENPR05JVE9fVVNFUl9QT09MUyByZXF1aXJlcyBhIHZhbGlkIGF1dGhvcml6ZXIuXFxcXFxcXCJcXFwiLCBbYXRdKSxcXG5cXHRcXFwiU2V0IEF1dGhvcml6ZXJJZCB0byB0aGUgYXV0aG9yaXplciB0aGlzIG1ldGhvZCBzaG91bGQgdXNlLCBvciBjaGFuZ2UgQXV0aG9yaXphdGlvblR5cGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LW1ldGhvZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcXFwiKVxcblxcdGF0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXphdGlvblR5cGVcXFwiKVxcblxcdGF0IGluIHtcXFwiQ1VTVE9NXFxcIiwgXFxcIkNPR05JVE9fVVNFUl9QT09MU1xcXCJ9XFxuXFx0X3BmX2FwZ21haWRfbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LW1vZGVsLXNjaGVtYS10eXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNb2RlbCBzY2hlbWEgJ3R5cGUnIG11c3QgYmUgYSBKU09OIFNjaGVtYSBkcmFmdC00IHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6TW9kZWxcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBTY2hlbWEgYm9keSBpcyBvcGFxdWUgSlNPTiB0byBldmVyeSBzY2hlbWEgbGF5ZXIuIEZ1bGwgZHJhZnQtNFxcbiMgdmFsaWRhdGlvbiBpcyBvdXQgb2Ygc2NvcGU7IGEgbGl0ZXJhbCB0b3AtbGV2ZWwgXFxcInR5cGVcXFwiIG91dHNpZGUgdGhlXFxuIyBkcmFmdC00IHNldCAoYSBjb21tb24gdHlwbyBsaWtlIFxcXCJTdHJpbmdcXFwiKSBpcyBwcm92YWJseSBmYXRhbC5cXG5fcGZfYXBnbXN0X3R5cGVzIDo9IHtcXFwiYXJyYXlcXFwiLCBcXFwiYm9vbGVhblxcXCIsIFxcXCJpbnRlZ2VyXFxcIiwgXFxcIm51bGxcXFwiLCBcXFwibnVtYmVyXFxcIiwgXFxcIm9iamVjdFxcXCIsIFxcXCJzdHJpbmdcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctbW9kZWwtc2NoZW1hLXR5cGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNjaGVtYS50eXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNb2RlbCBzY2hlbWEgdHlwZSAnJXMnIGlzIG5vdCBhIEpTT04gU2NoZW1hIGRyYWZ0LTQgdHlwZTsgdGhlIG1vZGVsIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBtb2RlbCBzcGVjaWZpZWQ6IFZhbGlkYXRpb24gUmVzdWx0OiB3YXJuaW5ncyA6IFtdLCBlcnJvcnMgOiBbSW52YWxpZCBtb2RlbCBzY2hlbWEgc3BlY2lmaWVkXVxcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRcXFwiVXNlIG9uZSBvZiBhcnJheSwgYm9vbGVhbiwgaW50ZWdlciwgbnVsbCwgbnVtYmVyLCBvYmplY3QsIHN0cmluZyAobG93ZXJjYXNlKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbW9kZWwuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TW9kZWxcXFwiKVxcblxcdHNjaCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVtYVxcXCIpXFxuXFx0aXNfb2JqZWN0KHNjaClcXG5cXHR0IDo9IG9iamVjdC5nZXQoc2NoLCBcXFwidHlwZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0dCAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0bm90IHQgaW4gX3BmX2FwZ21zdF90eXBlc1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXJlc291cmNlLXBhdGgtcGFydFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGF0aFBhcnQgYWxsb3dzIGEtekEtWjAtOS5fLTogb3Igb25lIGN1cmx5LWJyYWNlIHZhcmlhYmxlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlc291cmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBWYWxpZCBmb3JtcyBwZXIgdGhlIHNlcnZpY2UgZXJyb3IgaXRzZWxmOiBwbGFpbiBbYS16QS1aMC05Ll86LV0rLCBvciBhXFxuIyB3aG9sZS1wYXJ0IHZhcmlhYmxlIHtuYW1lfSAvIGdyZWVkeSB7bmFtZSt9Llxcbl9wZl9hcGdycHBfb2socHApIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOS5fOi1dKyRgLCBwcClcXG5cXG5fcGZfYXBncnBwX29rKHBwKSBpZiByZWdleC5tYXRjaChgXlxcXFx7W2EtekEtWjAtOS5fLV0rXFxcXCs/XFxcXH0kYCwgcHApXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1yZXNvdXJjZS1wYXRoLXBhcnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBhdGhQYXJ0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQYXRoUGFydCAnJXMnIGhhcyBjaGFyYWN0ZXJzIHRoZSBzZXJ2aWNlIHJlamVjdHM7IHRoZSByZXNvdXJjZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlJlc291cmNlJ3MgcGF0aCBwYXJ0IG9ubHkgYWxsb3cgYS16QS1aMC05Ll8tOiBvciBhIHZhbGlkIGdyZWVkeSBwYXRoIHZhcmlhYmxlIGFuZCBjdXJseSBicmFjZXMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZC5cXFxcXFxcIlxcXCIsIFtwcF0pLFxcblxcdFxcXCJVc2Ugb25seSBhLXpBLVowLTkuXy06IGluIHRoZSBwYXRoIHBhcnQsIG9yIGEgc2luZ2xlIHt2YXJpYWJsZX0gLyB7Z3JlZWR5K30gZm9ybVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktcmVzb3VyY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2VcXFwiKVxcblxcdHBwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF0aFBhcnRcXFwiKVxcblxcdGlzX3N0cmluZyhwcClcXG5cXHRub3QgX3BmX2FwZ3JwcF9vayhwcClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1zdGFnZS12YXJpYWJsZS12YWx1ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhZ2UgdmFyaWFibGUgdmFsdWVzIGhhdmUgYSByZXN0cmljdGVkIGNoYXJhY3RlciBzZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFsbG93ZWQgcGVyIHRoZSBzZXJ2aWNlIGVycm9yIGl0c2VsZjogYWxwaGFudW1lcmljcyBwbHVzIHNwYWNlIGFuZFxcbiMgLSAuIF8gOiAvID8gJiA9ICwgKG5vdGU6IHNwYWNlIElTIGxlZ2FsKS5cXG5fcGZfYXBnc3Z2X29rKHYpIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOSAuXzovPyY9LC1dKiRgLCB2KVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctc3RhZ2UtdmFyaWFibGUtdmFsdWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVmFyaWFibGVzLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJTdGFnZSB2YXJpYWJsZSAnJXMnIGhhcyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIGFsbG93ZWQgc2V0OyB0aGUgc3RhZ2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHN0YWdlIHZhcmlhYmxlIHZhbHVlIG9mIGtleSAlcy4gIFBsZWFzZSB1c2UgdmFsdWVzIHdpdGggYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHRoZSBzeW1ib2xzICcgJywgLScsICcuJywgJ18nLCAnOicsICcvJywgJz8nLCAnJicsICc9JywgYW5kICcsJy5cXFxcXFxcIlxcXCIsIFtrLCBrXSksXFxuXFx0XFxcIlJlc3RyaWN0IHRoZSB2YWx1ZSB0byBhbHBoYW51bWVyaWNzIGFuZCAnICcsIC0sIC4sIF8sIDosIC8sID8sICYsID0sICxcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3RhZ2UtdmFyaWFibGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXFxcIilcXG5cXHR2YXJzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmFyaWFibGVzXFxcIilcXG5cXHRpc19vYmplY3QodmFycylcXG5cXHRzb21lIGssIHYgaW4gdmFyc1xcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCBfcGZfYXBnc3Z2X29rKHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctdG9rZW4tYXV0aG9yaXplci1pZGVudGl0eS1zb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRPS0VOIGF1dGhvcml6ZXJzIG5lZWQgSWRlbnRpdHlTb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVE9LRU4gYXV0aG9yaXplcnMgcmVhZCB0aGUgdG9rZW4gZnJvbSB0aGUgaGVhZGVyIG5hbWVkIGJ5IElkZW50aXR5U291cmNlLFxcbiMgc28gdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIFJFUVVFU1QgYXV0aG9yaXplcnMgYXJlIG91dCBvZlxcbiMgc2NvcGU6IHRoZXkgbmVlZCBpdCBvbmx5IHdpdGggY2FjaGluZyBlbmFibGVkICh1bm1lYXN1cmVkKS4gQWJzZW5jZSBpc1xcbiMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ3Rpc19taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiSWRlbnRpdHlTb3VyY2VcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctdG9rZW4tYXV0aG9yaXplci1pZGVudGl0eS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkZW50aXR5U291cmNlXFxcIixcXG5cXHRcXFwiVE9LRU4gYXV0aG9yaXplciBoYXMgbm8gSWRlbnRpdHlTb3VyY2U7IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSWRlbnRpdHlTb3VyY2UgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgSWRlbnRpdHlTb3VyY2UsIGUuZy4gbWV0aG9kLnJlcXVlc3QuaGVhZGVyLkF1dGhvcml6YXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIlRPS0VOXFxcIlxcblxcdF9wZl9hcGd0aXNfbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItYXBpLW5hbWUtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gQXBpIG5lZWRzIGEgTmFtZSB1bmxlc3MgYW4gT3BlbkFQSSBib2R5IHByb3ZpZGVzIG9uZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWlycm9ycyBjZm4tbGludCBFMzY2MCBmb3IgUkVTVCBBUElzLCB3aGljaCBoYXMgbm8gQXBpR2F0ZXdheVYyXFxuIyBjb3VudGVycGFydDogd2l0aG91dCBhIEJvZHkgdG8gY2FycnkgaW5mby50aXRsZSwgTmFtZSBpcyBtYW5kYXRvcnkuXFxuIyBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWFwaS1uYW1lLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRcXFwiQXBpIGhhcyBubyBOYW1lIGFuZCBubyBPcGVuQVBJIGJvZHkgdG8gdGFrZSBvbmUgZnJvbTsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgQVBJIG5hbWUgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgTmFtZSwgb3IgcHJvdmlkZSB0aGUgZGVmaW5pdGlvbiB2aWEgQm9keSAvIEJvZHlTM0xvY2F0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWFwaS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJOYW1lXFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIkJvZHlcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiQm9keVMzTG9jYXRpb25cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItYXdzLXByb3h5LXBheWxvYWQtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBV1NfUFJPWFkgaW50ZWdyYXRpb25zIHRha2UgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wIG9yIDIuMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTY29wZWQgdG8gaW50ZWdyYXRpb25zIHdob3NlIEFwaSBzaWJsaW5nIGlzIHByb3ZhYmx5IEhUVFAgKHRoZSBiZW5jaGVkXFxuIyBzaGFwZSk7IFdlYlNvY2tldCBpbnRlZ3JhdGlvbnMgYXJlIG91dCBvZiBzY29wZS5cXG5fcGZfYWd2MmFwcF9odHRwX2FwaShuYW1lKSBpZiB7XFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXBpSWRcXFwiKVxcblxcdGFwaSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShhcGksIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sVHlwZVxcXCIpID09IFxcXCJIVFRQXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItYXdzLXByb3h5LXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlBheWxvYWRGb3JtYXRWZXJzaW9uICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBpbnRlZ3JhdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlVuc3VwcG9ydGVkIFBheWxvYWRGb3JtYXRWZXJzaW9uOiAlc1xcXFxcXFwiXFxcIiwgW3B2LCBwdl0pLFxcblxcdFxcXCJVc2UgMS4wIG9yIDIuMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uVHlwZVxcXCIpID09IFxcXCJBV1NfUFJPWFlcXFwiXFxuXFx0X3BmX2FndjJhcHBfaHR0cF9hcGkobmFtZSlcXG5cXHRwdiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocHYpXFxuXFx0bm90IHB2IGluIHtcXFwiMS4wXFxcIiwgXFxcIjIuMFxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1jb3JzLWNyZWRlbnRpYWxzLXdpbGRjYXJkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPUlMgQWxsb3dDcmVkZW50aWFscyBjYW5ub3QgcGFpciB3aXRoIGEgd2lsZGNhcmQgb3JpZ2luXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgQ09SUyBzcGVjIGZvcmJpZHMgY3JlZGVudGlhbGVkIHJlcXVlc3RzIGFnYWluc3QgYSB3aWxkY2FyZCBvcmlnaW4sXFxuIyBhbmQgdGhlIEFQSSBjcmVhdGUgZW5mb3JjZXMgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWNvcnMtY3JlZGVudGlhbHMtd2lsZGNhcmRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQ29yc0NvbmZpZ3VyYXRpb24uQWxsb3dPcmlnaW5zLiVkXFxcIiwgW28uaW5kZXhdKSxcXG5cXHRcXFwiQ29yc0NvbmZpZ3VyYXRpb24gc2V0cyBBbGxvd0NyZWRlbnRpYWxzIHdpdGggYSAnKicgb3JpZ2luOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiYWxsb3ctY3JlZGVudGlhbHMgaXMgbm90IHN1cHBvcnRlZCBpZiAnYWxsb3ctb3JpZ2luJyBpcyAqXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJMaXN0IGV4cGxpY2l0IG9yaWdpbnMsIG9yIGRyb3AgQWxsb3dDcmVkZW50aWFsc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1jb3JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvcnNDb25maWd1cmF0aW9uLkFsbG93Q3JlZGVudGlhbHNcXFwiKSkgPT0gdHJ1ZVxcblxcdHNvbWUgbyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29yc0NvbmZpZ3VyYXRpb24uQWxsb3dPcmlnaW5zXFxcIilcXG5cXHRvLnZhbHVlID09IFxcXCIqXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItaHR0cC1wcm94eS1wYXlsb2FkLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSFRUUF9QUk9YWSBpbnRlZ3JhdGlvbnMgb25seSB0YWtlIFBheWxvYWRGb3JtYXRWZXJzaW9uIDEuMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgMi4wIGV2ZW50IGZvcm1hdCBpcyBMYW1iZGEtb25seTsgSFRUUF9QUk9YWSBiYWNrZW5kcyBtdXN0IHN0YXkgb25cXG4jIDEuMC4gU2NvcGVkIHRvIHRoZSBiZW5jaGVkIHNoYXBlIChBcGkgc2libGluZyBwcm92YWJseSBIVFRQKS5cXG5fcGZfYWd2MmhwcF9odHRwX2FwaShuYW1lKSBpZiB7XFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXBpSWRcXFwiKVxcblxcdGFwaSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShhcGksIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sVHlwZVxcXCIpID09IFxcXCJIVFRQXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1wcm94eS1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIixcXG5cXHRcXFwiSFRUUF9QUk9YWSBpbnRlZ3JhdGlvbnMgb25seSBzdXBwb3J0IFBheWxvYWRGb3JtYXRWZXJzaW9uIDEuMDsgdGhlIGludGVncmF0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUGF5bG9hZEZvcm1hdFZlcnNpb24gMi4wIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGludGVncmF0aW9uIG9mIHR5cGUgSFRUUF9QUk9YWVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFBheWxvYWRGb3JtYXRWZXJzaW9uIHRvIDEuMCAob3Igb21pdCBpdCksIG9yIHN3aXRjaCB0byBhbiBBV1NfUFJPWFkgaW50ZWdyYXRpb24gZm9yIDIuMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uVHlwZVxcXCIpID09IFxcXCJIVFRQX1BST1hZXFxcIlxcblxcdF9wZl9hZ3YyaHBwX2h0dHBfYXBpKG5hbWUpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIpID09IFxcXCIyLjBcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1odHRwLXJvdXRlLWtleVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQIEFQSSByb3V0ZSBrZXlzIGFyZSBcXFwiTUVUSE9EIC9wYXRoXFxcIiBvciAkZGVmYXVsdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBXZWJTb2NrZXQgcm91dGUga2V5cyBhcmUgZnJlZS1mb3JtLCBzbyB0aGlzIG9ubHkganVkZ2VzIHJvdXRlcyB3aG9zZSBBcGlcXG4jIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUC4gVFJBQ0UgaXMgZGVwbG95LXZlcmlmaWVkIGFzIHJlamVjdGVkOyBwYXRocyB3aXRoXFxuIyBzcGFjZXMgYXJlIGxlZnQgYWxvbmUgKHVubWVhc3VyZWQpLlxcbl9wZl9hZ3YycmtfbWV0aG9kcyA6PSB7XFxcIkdFVFxcXCIsIFxcXCJQT1NUXFxcIiwgXFxcIlBVVFxcXCIsIFxcXCJQQVRDSFxcXCIsIFxcXCJERUxFVEVcXFwiLCBcXFwiSEVBRFxcXCIsIFxcXCJPUFRJT05TXFxcIiwgXFxcIkFOWVxcXCJ9XFxuXFxuX3BmX2FndjJya19odHRwX2FwaShuYW1lKSBpZiB7XFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXBpSWRcXFwiKVxcblxcdGFwaSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShhcGksIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sVHlwZVxcXCIpID09IFxcXCJIVFRQXFxcIlxcbn1cXG5cXG5fcGZfYWd2MnJrX29rKHJrKSBpZiByayA9PSBcXFwiJGRlZmF1bHRcXFwiXFxuXFxuX3BmX2FndjJya19vayhyaykgaWYge1xcblxcdHBhcnRzIDo9IHNwbGl0KHJrLCBcXFwiIFxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDJcXG5cXHRwYXJ0c1swXSBpbiBfcGZfYWd2MnJrX21ldGhvZHNcXG5cXHRzdGFydHN3aXRoKHBhcnRzWzFdLCBcXFwiL1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXJvdXRlLWtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm91dGVLZXlcXFwiLFxcblxcdHNwcmludGYoXFxcIlJvdXRlS2V5ICclcycgaXMgbWFsZm9ybWVkIGZvciBhbiBIVFRQIEFQSTsgdGhlIHJvdXRlIGNyZWF0ZSBmYWlscyB3aXRoICdUaGUgcHJvdmlkZWQgcm91dGUga2V5IGlzIG5vdCBmb3JtYXR0ZWQgcHJvcGVybHkgZm9yIEhUVFAgcHJvdG9jb2wuIEZvcm1hdCBzaG91bGQgYmUgXFxcXFxcXCJbSFRUUCBNRVRIT0RdIC9bUkVTT1VSQ0UgUEFUSF1cXFxcXFxcIiBvciBcXFxcXFxcIiRkZWZhdWx0XFxcXFxcXCInXFxcIiwgW3JrXSksXFxuXFx0XFxcIlVzZSBcXFxcXFxcIk1FVEhPRCAvcGF0aFxcXFxcXFwiIHdpdGggTUVUSE9EIG9uZSBvZiBHRVQgUE9TVCBQVVQgUEFUQ0ggREVMRVRFIEhFQUQgT1BUSU9OUyBBTlksIG9yICRkZWZhdWx0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWRldmVsb3Atcm91dGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcXFwiKVxcblxcdF9wZl9hZ3YycmtfaHR0cF9hcGkobmFtZSlcXG5cXHRyayA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJvdXRlS2V5XFxcIilcXG5cXHRpc19zdHJpbmcocmspXFxuXFx0bm90IF9wZl9hZ3Yycmtfb2socmspXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1odHRwLXJvdXRlLXNlbGVjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQIEFQSXMgYWNjZXB0IG9ubHkgdGhlIG1ldGhvZC1wYXRoIHJvdXRlIHNlbGVjdGlvbiBleHByZXNzaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIHNwZWxsaW5ncyBkZXBsb3ktdmVyaWZpZWQgYXMgYWNjZXB0ZWQ6IHRoZSBkb2N1bWVudGVkXFxuIyBcXFwiJHJlcXVlc3QubWV0aG9kICRyZXF1ZXN0LnBhdGhcXFwiIGFuZCB0aGUgXFxcIiR7cmVxdWVzdC5tZXRob2R9ICR7cmVxdWVzdC5wYXRofVxcXCJcXG4jIGZvcm0gdGhlIHNlcnZpY2UgZXJyb3IgaXRzZWxmIHByaW50cyAoYmVuY2ggdjAyYikuXFxuX3BmX2FndjJocnNfYWxsb3dlZCA6PSB7XFxcIiRyZXF1ZXN0Lm1ldGhvZCAkcmVxdWVzdC5wYXRoXFxcIiwgXFxcIiR7cmVxdWVzdC5tZXRob2R9ICR7cmVxdWVzdC5wYXRofVxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUtc2VsZWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLFxcblxcdHNwcmludGYoXFxcIkhUVFAgQVBJIFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbiAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQ7IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggJ1JvdXRlIHNlbGVjdGlvbiBleHByZXNzaW9uIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIFxcXFxcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcXFxcXCInXFxcIiwgW3JzZV0pLFxcblxcdFxcXCJVc2UgJHJlcXVlc3QubWV0aG9kICRyZXF1ZXN0LnBhdGgsIG9yIG9taXQgdGhlIHByb3BlcnR5IChIVFRQIEFQSXMgZGVmYXVsdCB0byBpdClcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXBpLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sVHlwZVxcXCIpID09IFxcXCJIVFRQXFxcIlxcblxcdHJzZSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKHJzZSlcXG5cXHRub3QgcnNlIGluIF9wZl9hZ3YyaHJzX2FsbG93ZWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWp3dC1hdXRob3JpemVyLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJKV1QgYXV0aG9yaXplcnMgbmVlZCBKd3RDb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBKV1QgYXV0aG9yaXplciBpcyBub3RoaW5nIGJ1dCBpdHMgaXNzdWVyL2F1ZGllbmNlIGNvbmZpZywgc28gdGhlXFxuIyBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYWd2MmphY19taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiSnd0Q29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWp3dC1hdXRob3JpemVyLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSnd0Q29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkpXVCBhdXRob3JpemVyIGhhcyBubyBKd3RDb25maWd1cmF0aW9uOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkp3dENvbmZpZ3VyYXRpb24gbXVzdCBub3QgYmUgbnVsbCBmb3IgSldUIEF1dGhvcml6ZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBKd3RDb25maWd1cmF0aW9uIHdpdGggSXNzdWVyIGFuZCBBdWRpZW5jZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJKV1RcXFwiXFxuXFx0X3BmX2FndjJqYWNfbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItcmVxdWVzdC1hdXRob3JpemVyLXBheWxvYWQtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSRVFVRVNUIGF1dGhvcml6ZXJzIG9uIEhUVFAgQVBJcyBuZWVkIEF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlcXVpcmVkIG9uIEhUVFAgQVBJcyBvbmx5IC0gV2ViU29ja2V0IFJFUVVFU1QgYXV0aG9yaXplcnMgbXVzdCBOT1Qgc2V0XFxuIyBpdCwgc28gdGhlIHJ1bGUgZmlyZXMgc29sZWx5IHdoZW4gdGhlIEFwaSBzaWJsaW5nIGlzIHByb3ZhYmx5IEhUVFAuXFxuIyBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3YycmFwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbl9wZl9hZ3YycmFwX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1yZXF1ZXN0LWF1dGhvcml6ZXItcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLFxcblxcdFxcXCJSRVFVRVNUIGF1dGhvcml6ZXIgb24gYW4gSFRUUCBBUEkgaGFzIG5vIEF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvbjsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb24gaXMgYSByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIFJFUVVFU1QgYXV0aG9yaXplclxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvbiB0byAxLjAgb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIlJFUVVFU1RcXFwiXFxuXFx0X3BmX2FndjJyYXBfaHR0cF9hcGkobmFtZSlcXG5cXHRfcGZfYWd2MnJhcF9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi13ZWJzb2NrZXQtcm91dGUtc2VsZWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIldlYlNvY2tldCBBUElzIG5lZWQgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBXZWJTb2NrZXQgQVBJcyByb3V0ZSBieSBldmFsdWF0aW5nIHRoaXMgZXhwcmVzc2lvbiBhZ2FpbnN0IGVhY2ggbWVzc2FnZSxcXG4jIHNvIHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYWd2Mndyc19taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItd2Vic29ja2V0LXJvdXRlLXNlbGVjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIixcXG5cXHRcXFwiV2ViU29ja2V0IEFQSSBoYXMgbm8gUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb24sIGUuZy4gJHJlcXVlc3QuYm9keS5hY3Rpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXBpLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sVHlwZVxcXCIpID09IFxcXCJXRUJTT0NLRVRcXFwiXFxuXFx0X3BmX2FndjJ3cnNfbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1jb29sZG93bi1ub24tbmVnYXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb29sZG93biBjYW5ub3QgYmUgbmVnYXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENvb2xkb3duIGlzIGEgc3RyaW5nIGluIHRoZSBzY2hlbWE7IG9ubHkgdGhlIHNlcnZpY2Uga25vd3MgaXQgaXMgYVxcbiMgbm9uLW5lZ2F0aXZlIGludGVnZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctY29vbGRvd24tbm9uLW5lZ2F0aXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db29sZG93blxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ29vbGRvd24gJXYgaXMgbmVnYXRpdmU7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBcXFxcXFxcIlxcXCIsIFtjXSksXFxuXFx0XFxcIlVzZSB6ZXJvIG9yIGEgcG9zaXRpdmUgbnVtYmVyIG9mIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRjIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvb2xkb3duXFxcIikpXFxuXFx0YyA8IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctZGVzaXJlZC1jYXBhY2l0eS1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRlc2lyZWRDYXBhY2l0eSBtdXN0IHNpdCBiZXR3ZWVuIE1pblNpemUgYW5kIE1heFNpemVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzaXplcyBhcmUgc3RyaW5nLXR5cGVkIGluIHRoZSBzY2hlbWE7IHRoZSBiZXR3ZWVuLXJlbGF0aW9uc2hpcCBpc1xcbiMgYSB0aHJlZS13YXkgY3Jvc3MtcHJvcGVydHkgY2hlY2suIFRoZSBtaW4+bWF4IHBhaXIgaXRzZWxmIGlzIGVuZ2luZVxcbiMgdGVycml0b3J5IChFMzcwNikgYW5kIG5vdCByZXBlYXRlZCBoZXJlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLWRlc2lyZWQtY2FwYWNpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlc2lyZWRDYXBhY2l0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGVzaXJlZENhcGFjaXR5ICV2IGlzIG91dHNpZGUgWyV2LCAldl07IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkRlc2lyZWQgY2FwYWNpdHk6JXYgbXVzdCBiZSBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgbWluIHNpemU6JXYgYW5kIG1heCBzaXplOiV2XFxcXFxcXCJcXFwiLCBbZGMsIG1uLCBteCwgZGMsIG1uLCBteF0pLFxcblxcdFxcXCJLZWVwIE1pblNpemUgPD0gRGVzaXJlZENhcGFjaXR5IDw9IE1heFNpemVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRkYyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXNpcmVkQ2FwYWNpdHlcXFwiKSlcXG5cXHRtbiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NaW5TaXplXFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWF4U2l6ZVxcXCIpKVxcblxcdG1uIDw9IG14XFxuXFx0X3BmX2FzZ2Rjcl9vdXQoZGMsIG1uLCBteClcXG59XFxuXFxuX3BmX2FzZ2Rjcl9vdXQoZGMsIG1uLCBfKSBpZiBkYyA8IG1uXFxuXFxuX3BmX2FzZ2Rjcl9vdXQoZGMsIF8sIG14KSBpZiBkYyA+IG14XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctaGVhbHRoLWNoZWNrLWdyYWNlLXBlcmlvZFwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhlYWx0aENoZWNrR3JhY2VQZXJpb2QgY2Fubm90IGJlIG5lZ2F0aXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIHR5cGVzIGl0IGFzIGEgYmFyZSBpbnRlZ2VyIHdpdGggbm8gZmxvb3I7IHplcm8gaXMgdGhlXFxuIyBzZXJ2aWNlIGRlZmF1bHQsIHNvIG9ubHkgbmVnYXRpdmVzIGFyZSBjbGFpbWVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLWhlYWx0aC1jaGVjay1ncmFjZS1wZXJpb2RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrR3JhY2VQZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIkhlYWx0aENoZWNrR3JhY2VQZXJpb2QgJXYgaXMgbmVnYXRpdmU7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkdyYWNlIHBlcmlvZCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cXFxcXFxcIlxcXCIsIFtnXSksXFxuXFx0XFxcIlVzZSB6ZXJvIG9yIGEgcG9zaXRpdmUgbnVtYmVyIG9mIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRnIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrR3JhY2VQZXJpb2RcXFwiKSlcXG5cXHRnIDwgMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1vbmRlbWFuZC1wZXJjZW50YWdlLW1heFwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5IHRvcHMgb3V0IGF0IDEwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBwZXJjZW50YWdlIHNwbGl0IGNhbm5vdCBleGNlZWQgMTAwOyB0aGUgc2NoZW1hIGhhcyBubyBtYXhpbXVtLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLW9uZGVtYW5kLXBlcmNlbnRhZ2UtbWF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NaXhlZEluc3RhbmNlc1BvbGljeS5JbnN0YW5jZXNEaXN0cmlidXRpb24uT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5ICV2IGlzIG92ZXIgMTAwOyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDBcXFxcXFxcIlxcXCIsIFtwXSksXFxuXFx0XFxcIlVzZSBhIHBlcmNlbnRhZ2UgYmV0d2VlbiAwIGFuZCAxMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtaW5zdGFuY2VzZGlzdHJpYnV0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRwIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1peGVkSW5zdGFuY2VzUG9saWN5Lkluc3RhbmNlc0Rpc3RyaWJ1dGlvbi5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eVxcXCIpKVxcblxcdHAgPiAxMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctdGFyZ2V0LXZhbHVlLXBvc2l0aXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IHRyYWNraW5nIG5lZWRzIGEgcG9zaXRpdmUgVGFyZ2V0VmFsdWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OlNjYWxpbmdQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIGZsb29yIGlzIGVmZmVjdGl2ZWx5IFxcXCJwb3NpdGl2ZVxcXCIgKDguNWUtMTIpOyB6ZXJvIGFuZFxcbiMgbmVnYXRpdmVzIGFyZSByZWplY3RlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy10YXJnZXQtdmFsdWUtcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhcmdldFRyYWNraW5nQ29uZmlndXJhdGlvbi5UYXJnZXRWYWx1ZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGFyZ2V0VmFsdWUgJXYgaXMgbm90IHBvc2l0aXZlOyB0aGUgcG9saWN5IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVGFyZ2V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiA4LjUxNTkyRS0xMiBhbmQgMS4xNzQyNzFFMTdcXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0XFxcIlVzZSBhIHBvc2l0aXZlIHRhcmdldCB2YWx1ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLXNjYWxpbmdwb2xpY3kuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OlNjYWxpbmdQb2xpY3lcXFwiKVxcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLlRhcmdldFZhbHVlXFxcIikpXFxuXFx0diA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLXpvbmUtb3Itc3VibmV0LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBncm91cCBuZWVkcyBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgb3Igc3VibmV0c1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGxhY2VtZW50IG11c3QgY29tZSBmcm9tIHNvbWV3aGVyZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FzZ3pzcl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLXpvbmUtb3Itc3VibmV0LXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5WUENab25lSWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIk5laXRoZXIgQXZhaWxhYmlsaXR5Wm9uZXMsIEF2YWlsYWJpbGl0eVpvbmVJZHMsIG5vciBWUENab25lSWRlbnRpZmllciBpcyBzZXQ7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIllvdSBtdXN0IHNwZWNpZnkgMSBvZiBlaXRoZXIgQXZhaWxhYmlsaXR5Wm9uZXMsIEF2YWlsYWJpbGl0eVpvbmVJZHMsIG9yIFN1Ym5ldHNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWUENab25lSWRlbnRpZmllciB3aXRoIHRoZSB0YXJnZXQgc3VibmV0cyAob3IgQXZhaWxhYmlsaXR5Wm9uZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0X3BmX2FzZ3pzcl9hYnNlbnQobmFtZSwgXFxcIkF2YWlsYWJpbGl0eVpvbmVzXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiQXZhaWxhYmlsaXR5Wm9uZUlkc1xcXCIpXFxuXFx0X3BmX2FzZ3pzcl9hYnNlbnQobmFtZSwgXFxcIlZQQ1pvbmVJZGVudGlmaWVyXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hZ2VudGNvcmUtZ2F0ZXdheS1qd3QtYXV0aG9yaXplclwiLFxuICAgIFwic2VydmljZVwiOiBcImJlZHJvY2stYWdlbnRjb3JlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdhdGV3YXlzIHdpdGggQXV0aG9yaXplclR5cGUgQ1VTVE9NX0pXVCByZXF1aXJlIEF1dGhvcml6ZXJDb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZ3dqd3RfaGFzX2NvbmZpZyhuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyQ29uZmlndXJhdGlvblxcXCIpKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYWdlbnRjb3JlLWdhdGV3YXktand0LWF1dGhvcml6ZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiQXV0aG9yaXplclR5cGUgaXMgQ1VTVE9NX0pXVCBidXQgQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gaXMgbWlzc2luZzsgdGhlIENyZWF0ZUdhdGV3YXkgQVBJIHJlcXVpcmVzIGl0IGFuZCB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIGEgVmFsaWRhdGlvbkV4Y2VwdGlvblxcXCIsXFxuXFx0XFxcIkFkZCBBdXRob3JpemVyQ29uZmlndXJhdGlvbi5DdXN0b21KV1RBdXRob3JpemVyIChkaXNjb3ZlcnlVcmwgYW5kIGFsbG93ZWRBdWRpZW5jZS9hbGxvd2VkQ2xpZW50cyksIG9yIHN3aXRjaCBBdXRob3JpemVyVHlwZSB0byBBV1NfSUFNXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlR2F0ZXdheS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIkNVU1RPTV9KV1RcXFwiXFxuXFx0bm90IF9wZl9nd2p3dF9oYXNfY29uZmlnKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYWdlbnRjb3JlLXJ1bnRpbWUtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJlZHJvY2stYWdlbnRjb3JlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFnZW50Q29yZSBSdW50aW1lIG5hbWVzIG11c3QgbWF0Y2ggW2EtekEtWl1bYS16QS1aMC05X117MCw0N30gKG5vIGh5cGhlbnMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDbG91ZEZvcm1hdGlvbiDjgrnjgq3jg7zjg57jga8gQWdlbnRSdW50aW1lTmFtZSDjga7jg5Hjgr/jg7zjg7PjgpLmjIHjgZ/jgarjgYTvvIjjgqjjg7Pjgrjjg7PntKDpgJrjgorjgIFcXG4jIDIwMjYtMDktMDEg44GrIDEuNy4wLWJldGEg44Gn56K66KqN77yJ44GM44CBQ3JlYXRlQWdlbnRSdW50aW1lIEFQSSDjga9cXG4jIFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9IOOCkuW8t+WItuOBmeOCi+OAguODj+OCpOODleODs+WFpeOCiuOBriBDREsg6aKo5ZG95ZCN44GM5a6a55Wq44Gu5q275Zug44CCXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hZ2VudGNvcmUtcnVudGltZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BZ2VudFJ1bnRpbWVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBZ2VudFJ1bnRpbWVOYW1lICclcycgaXMgaW52YWxpZDogaXQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgZGlnaXRzLCBhbmQgdW5kZXJzY29yZXMgKG1heCA0OCBjaGFyYWN0ZXJzLCBoeXBoZW5zIGFyZSBub3QgYWxsb3dlZCk7IENyZWF0ZUFnZW50UnVudGltZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtuXSksXFxuXFx0XFxcIlVzZSBhbiB1bmRlcnNjb3JlLXNlcGFyYXRlZCBuYW1lIHN1Y2ggYXMgJ215X2FnZW50X3J1bnRpbWUnXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQWdlbnRSdW50aW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BZ2VudFJ1bnRpbWVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRgLCBuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtYWNtLWNlcnQtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDbG91ZEZyb250IHZpZXdlciBjZXJ0aWZpY2F0ZXMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtYWNtLWNlcnQtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIkNsb3VkRnJvbnQgcmVxdWlyZXMgdGhlIEFDTSBjZXJ0aWZpY2F0ZSB0byBiZSBpbiB1cy1lYXN0LTEsIGJ1dCB0aGUgY2VydGlmaWNhdGUgaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0XFxcIklzc3VlIG9yIGltcG9ydCB0aGUgY2VydGlmaWNhdGUgaW4gdXMtZWFzdC0xIChlLmcuIGEgZGVkaWNhdGVkIHVzLWVhc3QtMSBzdGFjaykgYW5kIHJlZmVyZW5jZSB0aGF0IEFSTlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbmFtZXMtYW5kLWh0dHBzLXJlcXVpcmVtZW50cy5odG1sI2h0dHBzLXJlcXVpcmVtZW50cy1jZXJ0aWZpY2F0ZS1pc3N1ZXJcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkFjbUNlcnRpZmljYXRlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1syXSA9PSBcXFwiYWNtXFxcIlxcblxcdHJlZ2lvbiA6PSBwYXJ0c1szXVxcblxcdHJlZ2lvbiAhPSBcXFwiXFxcIlxcblxcdHJlZ2lvbiAhPSBcXFwidXMtZWFzdC0xXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtYWxpYXNlcy1yZXF1aXJlLWN1c3RvbS1jZXJ0aWZpY2F0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBkaXN0cmlidXRpb24gd2l0aCBBbGlhc2VzIGNhbm5vdCB1c2UgdGhlIENsb3VkRnJvbnQgZGVmYXVsdCBjZXJ0aWZpY2F0ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi12aWV3ZXJjZXJ0aWZpY2F0ZS5odG1sXFxcIlxcblxcbl9wZl9jZl9hbGlhc2NlcnRfZml4IDo9IFxcXCJBdHRhY2ggYW4gQUNNIGNlcnRpZmljYXRlIChBY21DZXJ0aWZpY2F0ZUFybiwgdXMtZWFzdC0xKSBvciBhbiBJQU0gY2VydGlmaWNhdGUsIHRvZ2V0aGVyIHdpdGggU3NsU3VwcG9ydE1ldGhvZCBhbmQgTWluaW11bVByb3RvY29sVmVyc2lvblxcXCJcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X2NvdW50KG5hbWUpIDo9IGNvdW50KFsxIHxcXG5cXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5BbGlhc2VzXFxcIilcXG5dKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1hbGlhc2VzLXJlcXVpcmUtY3VzdG9tLWNlcnRpZmljYXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGVcXFwiLFxcblxcdFxcXCJBIGRpc3RyaWJ1dGlvbiB3aXRoIEFsaWFzZXMgY2Fubm90IHVzZSB0aGUgQ2xvdWRGcm9udCBkZWZhdWx0IGNlcnRpZmljYXRlXFxcIixcXG5cXHRfcGZfY2ZfYWxpYXNjZXJ0X2ZpeCwgX3BmX2NmX2FsaWFzY2VydF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRfcGZfY2ZfYWxpYXNjZXJ0X2NvdW50KG5hbWUpID4gMFxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkNsb3VkRnJvbnREZWZhdWx0Q2VydGlmaWNhdGVcXFwiKSA9PSB0cnVlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNhY2hlZE1ldGhvZHMgbXVzdCBiZSBhIHN1YnNldCBvZiBBbGxvd2VkTWV0aG9kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfbWV0aG9kc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tY2FjaGViZWhhdmlvci5odG1sXFxcIlxcblxcbl9wZl9jZl9tZXRob2RzX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBDbG91ZEZyb250IGRlZmF1bHRzIEFsbG93ZWRNZXRob2RzIHRvIEdFVC9IRUFEIHdoZW4gdGhlIHByb3BlcnR5IGlzIG9taXR0ZWQsXFxuIyBzbyBhbiBvbWl0dGVkIEFsbG93ZWRNZXRob2RzIHN0aWxsIGNvbnN0cmFpbnMgd2hhdCBtYXkgYmUgY2FjaGVkLlxcbl9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYikgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQWxsb3dlZE1ldGhvZHNcXFwiLCBbXFxcIkdFVFxcXCIsIFxcXCJIRUFEXFxcIl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlZC1tZXRob2RzLXN1YnNldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2FjaGVkTWV0aG9kc1xcXCIsIFtiLnBhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZWRNZXRob2RzIGNvbnRhaW5zICVzLCB3aGljaCBpcyBub3QgaW4gQWxsb3dlZE1ldGhvZHMgJXZcXFwiLCBbbWV0aG9kLCBhbGxvd2VkXSksXFxuXFx0XFxcIkV2ZXJ5IG1ldGhvZCBpbiBDYWNoZWRNZXRob2RzIG11c3QgYWxzbyBhcHBlYXIgaW4gQWxsb3dlZE1ldGhvZHNcXFwiLFxcblxcdF9wZl9jZl9tZXRob2RzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRjYWNoZWQgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQ2FjaGVkTWV0aG9kc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoY2FjaGVkKVxcblxcdGFsbG93ZWQgOj0gX3BmX2NmX21ldGhvZHNfYWxsb3dlZChiKVxcblxcdGlzX2FycmF5KGFsbG93ZWQpXFxuXFx0c29tZSBtZXRob2QgaW4gY2FjaGVkXFxuXFx0bm90IG1ldGhvZCBpbiBhbGxvd2VkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBkaXN0cmlidXRpb24gbXVzdCBiZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fZml4IDo9IFxcXCJDcmVhdGUgdGhlIExhbWJkYUBFZGdlIGZ1bmN0aW9uIGluIHVzLWVhc3QtMSAoY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIGRvZXMgdGhpcyBmb3IgeW91KSBhbmQgYXNzb2NpYXRlIHRoYXQgdmVyc2lvbidzIEFSTlxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9sYW1iZGEtYXQtZWRnZS1mdW5jdGlvbi1yZXN0cmljdGlvbnMuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwifSB8XFxuXFx0XFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSl9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRfcGZfY2ZfZWRnZXJlZ2lvbl9maXgsIF9wZl9jZl9lZGdlcmVnaW9uX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gN1xcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImxhbWJkYVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGFzc29jaWF0aW9ucyBtdXN0IHJlZmVyZW5jZSBhIHZlcnNpb24gQVJOLCBub3QgYW4gYWxpYXMgb3IgJExBVEVTVFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfZWRnZXZlcl9maXggOj0gXFxcIkFzc29jaWF0ZSBhIHZlcnNpb24gQVJOIChpbiB0aGUgQ0RLLCBmbi5jdXJyZW50VmVyc2lvbi5lZGdlQXJuKSBpbnN0ZWFkIG9mIHRoZSB1bnF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGFuIGFsaWFzLCBvciAkTEFURVNUXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1sYW1iZGFmdW5jdGlvbmFzc29jaWF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG4jIExhbWJkYSBBUk5zIHNwbGl0IGludG8gNyBzZWdtZW50cyB3aGVuIHVucXVhbGlmaWVkXFxuIyAoYXJuOnBhcnRpdGlvbjpsYW1iZGE6cmVnaW9uOmFjY291bnQ6ZnVuY3Rpb246bmFtZSkgYW5kIDggd2hlbiBhIHZlcnNpb24gb3JcXG4jIGFsaWFzIHF1YWxpZmllciBpcyBhcHBlbmRlZC4gT25seSBhbiBhbGwtZGlnaXQgcXVhbGlmaWVyIGlzIGEgdmVyc2lvbi5cXG5fcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpIDo9IFt7XFxcInBhdGhcXFwiOiBwYXRoLCBcXFwiYXJuXFxcIjogYXJuLCBcXFwicGFydHNcXFwiOiBwYXJ0c30gfFxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXZlcl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cGFydHNbNV0gPT0gXFxcImZ1bmN0aW9uXFxcIlxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbnMuJWQuTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBbYi5wYXRoLCBhLmluZGV4XSlcXG5dXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0IHRoaXMgQVJOIGhhcyBubyBxdWFsaWZpZXJcXFwiLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDdcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIHJlcXVpcmVzIGEgdmVyc2lvbi1xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBidXQgJyVzJyBpcyBhbiBhbGlhcyBvciAkTEFURVNUXFxcIiwgW3F1YWxpZmllcl0pLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDhcXG5cXHRxdWFsaWZpZXIgOj0gaXQucGFydHNbN11cXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgcXVhbGlmaWVyKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9yaWdpbiBncm91cCBtZW1iZXJzIG11c3QgcmVmZXJlbmNlIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiB0aGUgZGlzdHJpYnV0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSkgOj0ge2lkIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luc1xcXCIpXFxuXFx0aWQgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaWQpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1vcmlnaW4tZ3JvdXAtbWVtYmVyLW9yaWdpblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luR3JvdXBzLkl0ZW1zLiVkLk1lbWJlcnNcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIk9yaWdpbiBncm91cCBtZW1iZXIgJyVzJyBkb2VzIG5vdCBtYXRjaCBhbnkgb3JpZ2luIElkIGluIHRoZSBkaXN0cmlidXRpb25cXFwiLCBbb2lkXSksXFxuXFx0XFxcIlBvaW50IGV2ZXJ5IG9yaWdpbiBncm91cCBtZW1iZXIgYXQgdGhlIElkIG9mIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiBPcmlnaW5zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vcmlnaW5ncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtc1xcXCIpXFxuXFx0bWVtYmVycyA6PSBvYmplY3QuZ2V0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIk1lbWJlcnNcXFwiLCB7fSksIFxcXCJJdGVtc1xcXCIsIFtdKVxcblxcdHNvbWUgbSBpbiBtZW1iZXJzXFxuXFx0b2lkIDo9IG9iamVjdC5nZXQobSwgXFxcIk9yaWdpbklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcob2lkKVxcblxcdG5vdCBvaWQgaW4gX3BmX2NmX29nbWVtYmVyX2lkcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBiZWhhdmlvciBUVExzIG11c3Qgc2F0aXNmeSBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX3R0bF9maXggOj0gXFxcIk9yZGVyIHRoZSBUVExzIGFzIE1pblRUTCA8PSBEZWZhdWx0VFRMIDw9IE1heFRUTFxcXCJcXG5cXG5fcGZfY2ZfdHRsX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIiwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSksIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heFRUTCAoJXYpXFxcIiwgW21uLCBteF0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC10dGwtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBiLnBhdGgsXFxuXFx0c3ByaW50ZihcXFwiTWluVFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRGVmYXVsdFRUTCAoJXYpXFxcIiwgW21uLCBkZl0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBkZlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIkRlZmF1bHRUVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFtkZiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bXggOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1heFRUTFxcXCIsIG51bGwpKVxcblxcdGRmID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBXQUZ2MiB3ZWIgQUNMIGF0dGFjaGVkIHRvIENsb3VkRnJvbnQgbXVzdCBiZSBnbG9iYWxseSBzY29wZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIFdBRnYyIEFSTiBjYXJyaWVzIGl0cyBzY29wZSBpbiB0aGUgcmVzb3VyY2Ugc2VnbWVudDpcXG4jICAgYXJuOmF3czp3YWZ2Mjp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmdsb2JhbC93ZWJhY2wvbmFtZS9pZCAgICAoQ0xPVURGUk9OVClcXG4jICAgYXJuOmF3czp3YWZ2MjphcC1ub3J0aGVhc3QtMToxMjM0NTY3ODkwMTI6cmVnaW9uYWwvd2ViYWNsLy4uLiAoUkVHSU9OQUwpXFxuIyBDbG91ZEZyb250IGFjY2VwdHMgb25seSB0aGUgZ2xvYmFsIGZvcm0uIENoZWNraW5nIHRoZSByZWdpb24gYWxvbmUgd291bGQgbWlzc1xcbiMgYSBSRUdJT05BTCB3ZWIgQUNMIHRoYXQgaGFwcGVucyB0byBoYXZlIGJlZW4gY3JlYXRlZCBpbiB1cy1lYXN0LTEsIHdoaWNoIGlzXFxuIyB0aGUgZWFzeSBtaXN0YWtlIHRvIG1ha2UuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IG9ubHkgYWNjZXB0cyBhIGdsb2JhbGx5IHNjb3BlZCB3ZWIgQUNMLCBidXQgdGhpcyBBUk4gaXMgc2NvcGVkICclcydcXFwiLCBbc2NvcGVdKSxcXG5cXHRcXFwiQ3JlYXRlIHRoZSB3ZWIgQUNMIHdpdGggc2NvcGUgQ0xPVURGUk9OVCBpbiB1cy1lYXN0LTEgKHdhZnYyLkNmbldlYkFDTCB3aXRoIHNjb3BlOiAnQ0xPVURGUk9OVCcpIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS13YWZ2Mi13ZWJhY2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuV2ViQUNMSWRcXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJ3YWZ2MlxcXCJcXG5cXHRzZWdtZW50cyA6PSBzcGxpdChwYXJ0c1s1XSwgXFxcIi9cXFwiKVxcblxcdHNjb3BlIDo9IHNlZ21lbnRzWzBdXFxuXFx0c2NvcGUgIT0gXFxcImdsb2JhbFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIFBlcmlvZCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIHZhbGlkIHZhbHVlcyBhcmVcXG4jIG9ubHkgaW4gdGhlIHNlcnZpY2UgKFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFwiKS5cXG4jIFRvcC1sZXZlbCBQZXJpb2Qgb25seSDigJQgdGhlIHNhbWUgY29uc3RyYWludCBpbnNpZGUgTWV0cmljU3RhdCB3YXMgbm90XFxuIyBtZWFzdXJlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tcGVyaW9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIlBlcmlvZCAldiBpcyBpbnZhbGlkOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJVc2UgMTAsIDIwLCAzMCwgb3IgYSBtdWx0aXBsZSBvZiA2MCBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QZXJpb2RcXFwiKSlcXG5cXHRub3QgcCBpbiB7MTAsIDIwLCAzMH1cXG5cXHRwICUgNjAgIT0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFuZGFyZCBvcGVyYXRvcnMgbmVlZCBUaHJlc2hvbGQsIHJhbmdlIG9wZXJhdG9ycyBuZWVkIFRocmVzaG9sZE1ldHJpY0lkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2N3YXRoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIlxcblxcbiMgVGhlIHR3byByYW5nZSBvcGVyYXRvcnMgYW5jaG9yIHRvIGFuIGFub21hbHktZGV0ZWN0aW9uIGJhbmQgdmlhXFxuIyBUaHJlc2hvbGRNZXRyaWNJZDsgZXZlcnkgb3RoZXIgb3BlcmF0b3IgbmVlZHMgYSBzdGF0aWMgVGhyZXNob2xkLiBBYnNlbmNlXFxuIyBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY3dhdGhfcmFuZ2Vfb3BzIDo9IHtcXFwiTGVzc1RoYW5Mb3dlck9yR3JlYXRlclRoYW5VcHBlclRocmVzaG9sZFxcXCIsIFxcXCJMZXNzVGhhbkxvd2VyVGhyZXNob2xkXFxcIiwgXFxcIkdyZWF0ZXJUaGFuVXBwZXJUaHJlc2hvbGRcXFwifVxcblxcbl9wZl9jd2F0aF9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRocmVzaG9sZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ29tcGFyaXNvbk9wZXJhdG9yICclcycgbmVlZHMgYSBzdGF0aWMgVGhyZXNob2xkIGJ1dCBub25lIGlzIHNldDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlB1dE1ldHJpY0FsYXJtIHJlcXVlc3Qgc2hvdWxkIGhhdmUgdmFsaWQgVGhyZXNob2xkIHBhcmFtZXRlclxcXFxcXFwiXFxcIiwgW29wXSksXFxuXFx0XFxcIlNldCBUaHJlc2hvbGQsIG9yIHN3aXRjaCB0byBhbiBhbm9tYWx5LWRldGVjdGlvbiBvcGVyYXRvciB3aXRoIFRocmVzaG9sZE1ldHJpY0lkXFxcIixcXG5cXHRfcGZfY3dhdGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRvcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXBhcmlzb25PcGVyYXRvclxcXCIpXFxuXFx0aXNfc3RyaW5nKG9wKVxcblxcdG5vdCBvcCBpbiBfcGZfY3dhdGhfcmFuZ2Vfb3BzXFxuXFx0X3BmX2N3YXRoX2Fic2VudChuYW1lLCBcXFwiVGhyZXNob2xkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXBhcmlzb25PcGVyYXRvciAnJXMnIGlzIGEgcmFuZ2Ugb3BlcmF0b3IgYnV0IFRocmVzaG9sZE1ldHJpY0lkIGlzIG5vdCBzZXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJDb21wYXJpc29uT3BlcmF0b3JzIGZvciByYW5nZXMgcmVxdWlyZSBUaHJlc2hvbGRNZXRyaWNJZCB0byBiZSBzZXRcXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJQb2ludCBUaHJlc2hvbGRNZXRyaWNJZCBhdCB0aGUgQU5PTUFMWV9ERVRFQ1RJT05fQkFORCBxdWVyeSBpZCwgb3IgdXNlIGEgc3RhdGljLXRocmVzaG9sZCBvcGVyYXRvclxcXCIsXFxuXFx0X3BmX2N3YXRoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0b3AgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wYXJpc29uT3BlcmF0b3JcXFwiKVxcblxcdG9wIGluIF9wZl9jd2F0aF9yYW5nZV9vcHNcXG5cXHRfcGZfY3dhdGhfYWJzZW50KG5hbWUsIFxcXCJUaHJlc2hvbGRNZXRyaWNJZFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1jb21wb3NpdGUtYWxhcm0tcnVsZS1zeW50YXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIEFsYXJtUnVsZSBtdXN0IHN0YXJ0IHdpdGggYSB2YWxpZCBleHByZXNzaW9uIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBuYW1lcyB0aGUgb25seSB0b2tlbnMgYSBydWxlIGV4cHJlc3Npb24gbWF5IHN0YXJ0IHdpdGg7IHRoaXNcXG4jIGNoZWNrcyBqdXN0IHRoYXQgZmlyc3QgdG9rZW4g4oCUIGEgZnVsbCBncmFtbWFyIGlzIG91dCBvZiBzY29wZS4gRnVuY3Rpb25cXG4jIHRva2VucyB0YWtlIGFuIGFyZ3VtZW50IGxpc3QsIGtleXdvcmRzIHN0YW5kIGFsb25lLlxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCIoXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiTk9UIFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk5PVChcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJBVF9MRUFTVFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHQgPT0gXFxcIlRSVUVcXFwiXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHQgPT0gXFxcIkZBTFNFXFxcIlxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJBTEFSTShcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJPSyhcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJJTlNVRkZJQ0lFTlRfREFUQShcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1jb21wb3NpdGUtYWxhcm0tcnVsZS1zeW50YXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsYXJtUnVsZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxhcm1SdWxlICclcycgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHZhbGlkIHRva2VuOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJFcnJvciBpbiBBbGFybVJ1bGUgW1Vuc3VwcG9ydGVkIHRva2VuIC4uLiBtdXN0IGJlOiAnKCcsICdOT1QnLCBBVF9MRUFTVCwgVFJVRSBvciBGQUxTRSwgQUxBUk0sIE9LLCBvciBJTlNVRkZJQ0lFTlRfREFUQV1cXFxcXFxcIlxcXCIsIFtleHByXSksXFxuXFx0XFxcIlN0YXJ0IHRoZSBydWxlIHdpdGggQUxBUk0oLi4uKSwgT0soLi4uKSwgSU5TVUZGSUNJRU5UX0RBVEEoLi4uKSwgTk9ULCBBVF9MRUFTVCwgVFJVRSwgRkFMU0UsIG9yIGEgcGFyZW50aGVzaXplZCBncm91cFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9tb25pdG9yaW5nL0NyZWF0ZV9Db21wb3NpdGVfQWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm1cXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGFybVJ1bGVcXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHQgIT0gXFxcIlxcXCJcXG5cXHRub3QgX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1kYXRhcG9pbnRzLWV2YWx1YXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRhdGFwb2ludHNUb0FsYXJtIG11c3Qgbm90IGV4Y2VlZCBFdmFsdWF0aW9uUGVyaW9kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXRhcG9pbnRzLWV2YWx1YXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhdGFwb2ludHNUb0FsYXJtXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEYXRhcG9pbnRzVG9BbGFybSAoJXYpIGV4Y2VlZHMgRXZhbHVhdGlvblBlcmlvZHMgKCV2KTsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIkRhdGFwb2ludHNUb0FsYXJtIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIEV2YWx1YXRpb25QZXJpb2RzXFxcXFxcXCJcXFwiLCBbZCwgZXZdKSxcXG5cXHRcXFwiTG93ZXIgRGF0YXBvaW50c1RvQWxhcm0gdG8gYXQgbW9zdCBFdmFsdWF0aW9uUGVyaW9kcywgb3IgcmFpc2UgRXZhbHVhdGlvblBlcmlvZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRkIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhdGFwb2ludHNUb0FsYXJtXFxcIikpXFxuXFx0ZXYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZhbHVhdGlvblBlcmlvZHNcXFwiKSlcXG5cXHRkID4gZXZcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWV4dGVuZGVkLXN0YXRpc3RpY1wiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBwZXJjZW50aWxlIHN0YXRpc3RpYyBjYW5ub3QgZXhjZWVkIHAxMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBlcmNlbnRpbGUgc3RhdGlzdGljcyBydW4gcDAuMCB0byBwMTAwLiBPbmx5IHRoZSBwTiBmb3JtIGlzIGNoZWNrZWQ7IG90aGVyXFxuIyBleHRlbmRlZCBmb3JtcyAodG0sIHdtLCB0YywgdHMsIC4uLikgaGF2ZSB0aGVpciBvd24gZ3JhbW1hcnMgYW5kIHdlcmUgbm90XFxuIyBtZWFzdXJlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZXh0ZW5kZWQtc3RhdGlzdGljXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FeHRlbmRlZFN0YXRpc3RpY1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXh0ZW5kZWRTdGF0aXN0aWMgJyVzJyBpcyBiZXlvbmQgcDEwMDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSB2YWx1ZSAlcyBmb3IgcGFyYW1ldGVyIEV4dGVuZGVkU3RhdGlzdGljIGlzIG5vdCBzdXBwb3J0ZWQuXFxcXFxcXCJcXFwiLCBbcywgc10pLFxcblxcdFxcXCJVc2UgYSBwZXJjZW50aWxlIGJldHdlZW4gcDAuMCBhbmQgcDEwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9tb25pdG9yaW5nL2Nsb3Vkd2F0Y2hfY29uY2VwdHMuaHRtbCNQZXJjZW50aWxlc1xcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFN0YXRpc3RpY1xcXCIpXFxuXFx0aXNfc3RyaW5nKHMpXFxuXFx0c3RhcnRzd2l0aChzLCBcXFwicFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIoc3Vic3RyaW5nKHMsIDEsIGNvdW50KHMpIC0gMSkpXFxuXFx0biA+IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHBlciBxdWVyeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIHF1ZXJ5IGVudHJ5IGlzIGVpdGhlciBhIG1hdGggZXhwcmVzc2lvbiBvciBhIG1ldHJpYyBmZXRjaCwgbmV2ZXIgYm90aC5cXG4jIFRoZSBzcGVjaWZ5LW5laXRoZXIgc2hhcGUgZmFpbHMgdG9vLCBidXQgd2l0aCBhbiB1bnJlbGF0ZWQgZXJyb3IgKFxcXCJQZXJpb2RcXG4jIG11c3Qgbm90IGJlIG51bGxcXFwiLCBiZW5jaCB3MDNiKSDigJQgc28gb25seSB0aGUgYm90aC1zZXQgZGlyZWN0aW9uIGlzIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTWV0cmljcy4lZFxcXCIsIFtxLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTWV0cmljIHF1ZXJ5ICclcycgc2V0cyBib3RoIEV4cHJlc3Npb24gYW5kIE1ldHJpY1N0YXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVycyBNZXRyaWNEYXRhUXVlcnkgRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCB5b3UgaGF2ZSBzcGVjaWZpZWQgYm90aC5cXFxcXFxcIlxcXCIsIFtxaWRdKSxcXG5cXHRcXFwiS2VlcCB0aGUgRXhwcmVzc2lvbiBhbmQgZHJvcCBNZXRyaWNTdGF0IChmZXRjaCB0aGUgaW5wdXRzIGluIHNlcGFyYXRlIHF1ZXJpZXMpLCBvciB2aWNlIHZlcnNhXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0c29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIilcXG5cXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJFeHByZXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0cWlkIDo9IG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIklkXFxcIiwgXFxcIjxxdWVyeT5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LXJldHVybmRhdGFcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4YWN0bHkgb25lIG1ldHJpYyBxdWVyeSBtdXN0IHJldHVybiBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbiBhbGFybSBvbiBhIE1ldHJpY3MgYXJyYXkgbmVlZHMgZXhhY3RseSBvbmUgcXVlcnkgcmV0dXJuaW5nIGRhdGEuXFxuIyBSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUgd2hlbiBhYnNlbnQgKGJlbmNoIHcwNGIpLCBhbmQgZXhwbGljaXQgZmFsc2VcXG4jIGV2ZXJ5d2hlcmUgaXMgcmVqZWN0ZWQgdG9vICh3MDRjKS4gQSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIG1ha2VzIHRoZSBjb3VudCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2N3bXFyX2NvdW50YWJsZShxKSBpZiBpc19ib29sZWFuKG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBudWxsKSlcXG5cXG5fcGZfY3dtcXJfcmV0dXJucyhxKSBpZiBvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgb2YgdGhlIG1ldHJpYyBxdWVyaWVzIHJldHVybiBkYXRhIChSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRXhhY3RseSBvbmUgZWxlbWVudCBvZiB0aGUgbWV0cmljcyBsaXN0IHNob3VsZCByZXR1cm4gZGF0YS5cXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBSZXR1cm5EYXRhOiBmYWxzZSBvbiBldmVyeSBxdWVyeSBleGNlcHQgdGhlIG9uZSB0aGUgYWxhcm0gc2hvdWxkIHdhdGNoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0aXRlbXMgOj0gW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgcSBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfb2JqZWN0KHEudmFsdWUpXFxuXFx0XFx0X3BmX2N3bXFyX2NvdW50YWJsZShxLnZhbHVlKVxcblxcdH1cXG5cXHRuIDo9IGNvdW50KFtxIHwgc29tZSBxIGluIGl0ZW1zOyBfcGZfY3dtcXJfcmV0dXJucyhxLnZhbHVlKV0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1hbGlhcy11c2VybmFtZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFsaWFzQXR0cmlidXRlcyBhbmQgVXNlcm5hbWVBdHRyaWJ1dGVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEtleSBwcmVzZW5jZSBpcyB0aGUgdmlvbGF0aW9uIHJlZ2FyZGxlc3Mgb2YgdmFsdWVzLCBzbyB0aGlzIGNoZWNrcyB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCBkaXJlY3RseSAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ2F1ZV9zZXQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1hbGlhcy11c2VybmFtZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlVzZXJuYW1lQXR0cmlidXRlc1xcXCIsXFxuXFx0XFxcIkJvdGggQWxpYXNBdHRyaWJ1dGVzIGFuZCBVc2VybmFtZUF0dHJpYnV0ZXMgYXJlIHNldDsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJPbmx5IG9uZSBvZiB0aGUgYWxpYXNBdHRyaWJ1dGVzIG9yIHVzZXJuYW1lQXR0cmlidXRlcyBjYW4gYmUgc2V0IGluIGEgVXNlciBwb29sLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiS2VlcCBvbmU6IGFsaWFzZXMgZm9yIHNpZ24taW4gYWx0ZXJuYXRpdmVzLCBvciB1c2VybmFtZSBhdHRyaWJ1dGVzIHRvIHJlcGxhY2UgdXNlcm5hbWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0X3BmX2NvZ2F1ZV9zZXQobmFtZSwgXFxcIkFsaWFzQXR0cmlidXRlc1xcXCIpXFxuXFx0X3BmX2NvZ2F1ZV9zZXQobmFtZSwgXFxcIlVzZXJuYW1lQXR0cmlidXRlc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjbGllbnRfY3JlZGVudGlhbHMgY2Fubm90IGNvbWJpbmUgd2l0aCBjb2RlIG9yIGltcGxpY2l0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYWNoaW5lLXRvLW1hY2hpbmUgYW5kIHVzZXItZmFjaW5nIGdyYW50cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9uIG9uZVxcbiMgY2xpZW50Llxcbl9wZl9jb2djY2VfZmxvd3MobmFtZSkgOj0ge2YudmFsdWUgfCBzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIil9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93cyBjb21iaW5lcyBjbGllbnRfY3JlZGVudGlhbHMgd2l0aCAnJXMnOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cgY2FuIG5vdCBiZSBzZWxlY3RlZCBhbG9uZyB3aXRoIGNvZGUgZmxvdyBvciBpbXBsaWNpdCBmbG93LlxcXFxcXFwiXFxcIiwgW290aGVyXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBmbG93cyBhY3Jvc3Mgc2VwYXJhdGUgdXNlciBwb29sIGNsaWVudHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRmbG93cyA6PSBfcGZfY29nY2NlX2Zsb3dzKG5hbWUpXFxuXFx0XFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCIgaW4gZmxvd3NcXG5cXHRzb21lIG90aGVyIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0b3RoZXIgaW4gZmxvd3NcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1zZWNyZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImNsaWVudF9jcmVkZW50aWFscyBuZWVkcyBhIGNsaWVudCBzZWNyZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1hY2hpbmUtdG8tbWFjaGluZSBhdXRoIGlzIHNlY3JldC1iYXNlZC4gR2VuZXJhdGVTZWNyZXQgZGVmYXVsdHMgdG9cXG4jIGZhbHNlLCBzbyBib3RoIHRoZSBsaXRlcmFsIGZhbHNlIGFuZCB0aGUgYWJzZW50IGtleSBsZWF2ZSB0aGUgY2xpZW50XFxuIyBzZWNyZXRsZXNzLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZVxcbiMgQUdFTlRTLm1kKS5cXG5fcGZfY29nY2NzX25vX3NlY3JldChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkdlbmVyYXRlU2VjcmV0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29nY2NzX25vX3NlY3JldChuYW1lKSBpZiBjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdlbmVyYXRlU2VjcmV0XFxcIikpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1zZWNyZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkdlbmVyYXRlU2VjcmV0XFxcIixcXG5cXHRcXFwiY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cgb24gYSBjbGllbnQgd2l0aG91dCBhIHNlY3JldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IGNhbiBub3QgYmUgc2VsZWN0ZWQgaWYgY2xpZW50IGRvZXMgbm90IGhhdmUgYSBjbGllbnQgc2VjcmV0LlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEdlbmVyYXRlU2VjcmV0OiB0cnVlIG9uIHRoaXMgY2xpZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0c29tZSBmIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIpXFxuXFx0Zi52YWx1ZSA9PSBcXFwiY2xpZW50X2NyZWRlbnRpYWxzXFxcIlxcblxcdF9wZl9jb2djY3Nfbm9fc2VjcmV0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRG9tYWluIHByZWZpeGVzIGNhbm5vdCBjb250YWluIHJlc2VydmVkIHdvcmRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSByZWZ1c2VzIHByZWZpeGVzIHdpdGggYSByZXNlcnZlZCB3b3JkIGFzIGEgaHlwaGVuLWRlbGltaXRlZFxcbiMgdG9rZW4sIHdpdGggb25seSBhIGdlbmVyaWMgZXJyb3IuIFBpbm5lZCBieSBjb250cm9sbGVkIHBhaXJzOiAtYXdzLSAvXFxuIyAtYW1hem9uLSAvIC1jb2duaXRvLSBmYWlsIHdoaWxlIC1hd3NvbWUtIGRlcGxveXMgKGJlbmNoIGMwNy1jMDdlKSwgc29cXG4jIGEgdG9rZW4gbWVyZWx5IGNvbnRhaW5pbmcgYSB3b3JkIHN0YXlzIGxlZ2FsLlxcbl9wZl9jb2dkcndfd29yZHMgOj0ge1xcXCJhd3NcXFwiLCBcXFwiYW1hem9uXFxcIiwgXFxcImNvZ25pdG9cXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEb21haW4gcHJlZml4ICclcycgaGFzIHRoZSByZXNlcnZlZCB3b3JkICclcycgYXMgYSBzZWdtZW50OyB0aGUgZG9tYWluIGNyZWF0ZSBmYWlscyB3aXRoIHRoZSBnZW5lcmljIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcXFxcXCJcXFwiLCBbZCwgd10pLFxcblxcdFxcXCJSZW5hbWUgb3IgbWVyZ2UgdGhhdCBzZWdtZW50IChlLmcuIG15YXBwLWF1dGgpOyB3b3JkcyBtZXJlbHkgaW5zaWRlIGEgbG9uZ2VyIHNlZ21lbnQgYXJlIGZpbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by11c2VyLXBvb2xzLWFzc2lnbi1kb21haW4tcHJlZml4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcIilcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRzb21lIHcgaW4gX3BmX2NvZ2Ryd193b3Jkc1xcblxcdHcgaW4gc3BsaXQoZCwgXFxcIi1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1GQSB3aXRob3V0IGFueSBmYWN0b3IgY29uZmlndXJhdGlvbiBjYW5ub3QgZGVwbG95XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBXaXRoIE1GQSBvbiBhbmQgbm8gRW5hYmxlZE1mYXMsIENvZ25pdG8gZmFsbHMgYmFjayB0byBTTVMgTUZBLCB3aGljaFxcbiMgbmVlZHMgU21zQ29uZmlndXJhdGlvbi4gQSBwb29sIGRlY2xhcmluZyBFbmFibGVkTWZhcyAoZS5nLiBUT1RQIG9ubHksXFxuIyBiZW5jaCBjMDViKSBpcyB2YWxpZCB3aXRob3V0IFNNUywgc28gaXRzIHByZXNlbmNlIG11dGVzIHRoZSBydWxlLlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nbXNjX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW1mYS1zbXMtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNZmFDb25maWd1cmF0aW9uICclcycgd2l0aCBubyBTbXNDb25maWd1cmF0aW9uIGFuZCBubyBFbmFibGVkTWZhczsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTTVMgY29uZmlndXJhdGlvbiBhbmQgQXV0byB2ZXJpZmljYXRpb24gZm9yIHBob25lX251bWJlciBhcmUgcmVxdWlyZWQgd2hlbiBNRkEgaXMgcmVxdWlyZWQvb3B0aW9uYWxcXFxcXFxcIlxcXCIsIFttZmFdKSxcXG5cXHRcXFwiQ29uZmlndXJlIFNtc0NvbmZpZ3VyYXRpb24gKFNNUyBNRkEpLCBvciBwaWNrIGZhY3RvcnMgdmlhIEVuYWJsZWRNZmFzIChlLmcuIFNPRlRXQVJFX1RPS0VOX01GQSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtZmEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIilcXG5cXHRtZmEgaW4ge1xcXCJPTlxcXCIsIFxcXCJPUFRJT05BTFxcXCJ9XFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIlNtc0NvbmZpZ3VyYXRpb25cXFwiKVxcblxcdF9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIFxcXCJFbmFibGVkTWZhc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1jYWxsYmFjay1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY29kZSBhbmQgaW1wbGljaXQgT0F1dGggZmxvd3MgbmVlZCBDYWxsYmFja1VSTHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZGlyZWN0LWJhc2VkIGZsb3dzIG5lZWQgc29tZXdoZXJlIHRvIHJlZGlyZWN0IHRvLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2NyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWxsYmFja1VSTHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGhhcyAnJXMnIGJ1dCBDYWxsYmFja1VSTHMgaXMgbm90IHNldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkNhbGxiYWNrVXJscyBjYW4gbm90IGJlIGVtcHR5IHdoZW4gY29kZSBmbG93IG9yIGltcGxpY2l0IGZsb3cgaXMgc2VsZWN0ZWRcXFxcXFxcIlxcXCIsIFtmLnZhbHVlXSksXFxuXFx0XFxcIkFkZCBhdCBsZWFzdCBvbmUgY2FsbGJhY2sgVVJMXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIilcXG5cXHRmLnZhbHVlIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0X3BmX2NvZ29jcl9hYnNlbnQobmFtZSwgXFxcIkNhbGxiYWNrVVJMc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIE9BdXRoIHJlcXVpcmVzIGJvdGggQWxsb3dlZE9BdXRoRmxvd3MgYW5kIEFsbG93ZWRPQXV0aFNjb3Blc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBkaXJlY3Rpb25zIGRlcGxveS12ZXJpZmllZC4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ29mc19hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2dvZnNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxuX3BmX2NvZ29mc19tc2cgOj0gXFxcInRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzIGFyZSByZXF1aXJlZCBpZiB1c2VyIHBvb2wgY2xpZW50IGlzIGFsbG93ZWQgdG8gdXNlIE9BdXRoIGZsb3dzLlxcXFxcXFwiXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50IGlzIHRydWUgYnV0IEFsbG93ZWRPQXV0aEZsb3dzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhGbG93cywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtZmxvd3Mtc2NvcGVzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhTY29wZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoU2NvcGVzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhTY29wZXMsIG9yIGRyb3AgQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIsXFxuXFx0X3BmX2NvZ29mc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIpKSA9PSB0cnVlXFxuXFx0X3BmX2NvZ29mc19hYnNlbnQobmFtZSwgXFxcIkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXNzd29yZFBvbGljeSBNaW5pbXVtTGVuZ3RoIHJ1bnMgNiB0byA5OVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBNaW5pbXVtTGVuZ3RoIGFzIGEgYmFyZSBpbnRlZ2VyOyBib3RoIGJvdW5kc1xcbiMgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ncG1sX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXBhc3N3b3JkcG9saWN5Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLlBhc3N3b3JkUG9saWN5Lk1pbmltdW1MZW5ndGhcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1MZW5ndGggJXYgaXMgdW5kZXIgdGhlIGZsb29yOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDZcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sIDwgNlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTlcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sID4gOTlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyBjYW5ub3QgcmVwZWF0IHByaW9yaXRpZXMgb3IgbmFtZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIGR1cGxpY2F0ZSBjaGVjayBvbiB0aGUgbWVjaGFuaXNtIGxpc3Q7IHRoZSBzZXJ2aWNlIGVycm9yIG5hbWVzXFxuIyBib3RoIGR1cGxpY2F0ZSBwcmlvcml0aWVzIGFuZCBkdXBsaWNhdGUgbWVjaGFuaXNtIG5hbWVzLlxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRwYSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhLCBcXFwiUHJpb3JpdHlcXFwiLCAtMSkpXFxuXFx0cGIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYiwgXFxcIlByaW9yaXR5XFxcIiwgLTIpKVxcblxcdHBhID09IHBiXFxufVxcblxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRuIDo9IG9iamVjdC5nZXQoYSwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9hXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRuID09IG9iamVjdC5nZXQoYiwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9iXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtcy4lZFxcXCIsIFtiLmluZGV4XSksXFxuXFx0XFxcIlJlY292ZXJ5IG1lY2hhbmlzbXMgcmVwZWF0IGEgcHJpb3JpdHkgb3IgbmFtZTsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2NvdW50IFJlY292ZXJ5IFNldHRpbmcgY2Fubm90IGhhdmUgZHVwbGljYXRlIHByaW9yaXRpZXMgb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgZWFjaCByZWNvdmVyeSBtZWNoYW5pc20gYSBkaXN0aW5jdCBwcmlvcml0eSBhbmQgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1yZWNvdmVyeW9wdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRpc19vYmplY3QoYS52YWx1ZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRfcGZfY29ncmRwX2R1cChhLnZhbHVlLCBiLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTY2hlbWEgYXR0cmlidXRlIE1heExlbmd0aCBjYW5ub3QgdW5kZXJjdXQgTWluTGVuZ3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgY29uc3RyYWludHMgYXJlIHR5cGVkIGFzIHN0cmluZ3MsIHNvIG5vIHNjaGVtYSBsYXllciBjYW4gY29tcGFyZVxcbiMgdGhlbSBudW1lcmljYWxseS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlNjaGVtYS4lZC5TdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIFthdHQuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBoYXMgTWluTGVuZ3RoICV2IG92ZXIgTWF4TGVuZ3RoICV2OyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNhbm5vdCBoYXZlIGEgbWF4IGxlbmd0aCBzaG9ydGVyIHRoYW4gaXQncyBtaW4gbGVuZ3RoXFxcXFxcXCJcXFwiLCBbb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjxhdHRyPlxcXCIpLCBtbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5MZW5ndGggbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heExlbmd0aFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1zY2hlbWFhdHRyaWJ1dGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdHNvbWUgYXR0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlbWFcXFwiKVxcblxcdGlzX29iamVjdChhdHQudmFsdWUpXFxuXFx0c2FjIDo9IG9iamVjdC5nZXQoYXR0LnZhbHVlLCBcXFwiU3RyaW5nQXR0cmlidXRlQ29uc3RyYWludHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc2FjKVxcblxcdG1uX3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1pbkxlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bW5fcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRteF9yYXcgOj0gb2JqZWN0LmdldChzYWMsIFxcXCJNYXhMZW5ndGhcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdG14X3JhdyAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG1uX3JhdylcXG5cXHRteCA6PSB0b19udW1iZXIobXhfcmF3KVxcblxcdG1uID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjY2VzcyBhbmQgaWQgdG9rZW5zIGNhbm5vdCBvdXRsaXZlIHRoZSByZWZyZXNoIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDcm9zcy1wcm9wZXJ0eSBpbmVxdWFsaXR5IGJldHdlZW4gZGlmZmVyZW50bHktdW5pdGVkIGR1cmF0aW9ucyAtIG9ubHlcXG4jIGNvbXBhcmFibGUgYWZ0ZXIgbm9ybWFsaXppbmcgdG8gc2Vjb25kcy4gVW5pdCBkZWZhdWx0cyBhcmUgdGhlXFxuIyBkZXBsb3ktdmVyaWZpZWQgaG91cnMvaG91cnMvZGF5cy5cXG5fcGZfY29ndGVvX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0ZW9fc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndGVvX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndGVvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi1leHBpcmF0aW9uLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3MgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2EsIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IG9yIGxlbmd0aGVuIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5XFxcIixcXG5cXHRfcGZfY29ndGVvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0YSA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0YSA+IHJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWQgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2ksIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRpIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0aSA+IHJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb2tlbiB2YWxpZGl0eSByYW5nZXMgZGVwZW5kIG9uIHRva2VuIHR5cGUgYW5kIHVuaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgdGhlIHZhbGlkaXRpZXMgYXMgYmFyZSBpbnRlZ2VyczsgdGhlIHJlYWwgcmFuZ2VzIGFyZVxcbiMgcGVyIHRva2VuIHR5cGUgQU5EIHVuaXQgKGFjY2Vzcy9pZDogNSBtaW51dGVzLTEgZGF5LCByZWZyZXNoOiA2MFxcbiMgbWludXRlcy0xMCB5ZWFycykuIFVuaXQgZGVmYXVsdHMgKGhvdXJzL2hvdXJzL2RheXMpIGFyZSBkZXBsb3ktdmVyaWZpZWQuXFxuX3BmX2NvZ3R2cl91bml0X3NlY3MgOj0ge1xcXCJzZWNvbmRzXFxcIjogMSwgXFxcIm1pbnV0ZXNcXFwiOiA2MCwgXFxcImhvdXJzXFxcIjogMzYwMCwgXFxcImRheXNcXFwiOiA4NjQwMH1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgXykgOj0gdSBpZiB7XFxuXFx0dSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuVG9rZW5WYWxpZGl0eVVuaXRzLiVzXFxcIiwgW3VuaXRLZXldKSlcXG5cXHRpc19zdHJpbmcodSlcXG59XFxuXFxuX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpIDo9IGRlZlVuaXQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHR2dSA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiVG9rZW5WYWxpZGl0eVVuaXRzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHR2dSlcXG5cXHRvYmplY3QuZ2V0KHR2dSwgdW5pdEtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29ndHZyX3NlY3MobmFtZSwgdmFsS2V5LCB1bml0S2V5LCBkZWZVbml0KSA6PSBzIGlmIHtcXG5cXHR2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbdmFsS2V5XSkpKVxcblxcdHUgOj0gX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpXFxuXFx0cyA6PSB2ICogX3BmX2NvZ3R2cl91bml0X3NlY3NbdV1cXG59XFxuXFxuX3BmX2NvZ3R2cl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzIDwgMzAwXFxuXFxuX3BmX2NvZ3R2cl9haV9iYWQocykgaWYgcyA+IDg2NDAwXFxuXFxuX3BmX2NvZ3R2cl9ydF9iYWQocykgaWYgcyA8IDM2MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzID4gMzE1MzYwMDAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNSBtaW51dGVzIGFuZCAxIGRheVxcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5XFxcIiwgXFxcIkFjY2Vzc1Rva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWRUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIklkVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJJZFRva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eSB3b3JrcyBvdXQgdG8gJXYgc2Vjb25kcywgb3V0c2lkZSA2MCBtaW51dGVzLTEwIHllYXJzOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNjAgbWludXRlcyBhbmQgMTAgeWVhcnNcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiUmVmcmVzaFRva2VuXFxcIiwgXFxcImRheXNcXFwiKVxcblxcdF9wZl9jb2d0dnJfcnRfYmFkKHMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZSB1c2VkIGJ5IGEga2V5IHNjaGVtYVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoOiBldmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlXFxuIyB1c2VkIGJ5IHRoZSB0YWJsZSBrZXkgc2NoZW1hIG9yIGFuIGluZGV4IGtleSBzY2hlbWEuIFRoZSBlbmdpbmUncyBFMzAzOVxcbiMgY2hlY2tzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb25seSAoa2V5IGF0dHJpYnV0ZSBub3QgZGVmaW5lZCksIHNvIHRoZVxcbiMgY2xhc3NpYyBcXFwicmVtb3ZlZCBhIEdTSSwgbGVmdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25cXFwiIG1pc3Rha2Ugc2FpbHMgdGhyb3VnaC5cXG5cXG5fcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBwcm9wKSA6PSB7YSB8XFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VzZWQobmFtZSkgOj0gKChfcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSlcXG5cXG4jIEFueSB1bnJlc29sdmFibGUgQXR0cmlidXRlTmFtZSBpbiBhIGtleSBzY2hlbWEgbWVhbnMgdGhlIHVzZWQtc2V0IGlzXFxuIyBpbmNvbXBsZXRlLCBzbyB0aGUgcnVsZSBtdXN0IHN0YXkgc2lsZW50IHJhdGhlciB0aGFuIGd1ZXNzLlxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgaXMgZGVmaW5lZCBidXQgdXNlZCBieSBubyBrZXkgc2NoZW1hOyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaCBhbmQgZmFpbHMgd2l0aCBcXFxcXFxcIk51bWJlciBvZiBhdHRyaWJ1dGVzIGluIEtleVNjaGVtYSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIG51bWJlciBvZiBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgdW51c2VkIGRlZmluaXRpb24gKG5vbi1rZXkgYXR0cmlidXRlcyBzdWNoIGFzIGEgVFRMIGF0dHJpYnV0ZSBtdXN0IE5PVCBiZSBkZWNsYXJlZCksIG9yIGFkZCB0aGUgaW5kZXggdGhhdCB1c2VzIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRub3QgX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJhZHVfdXNlZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIEJpbGxpbmdNb2RlIChyZXF1aXJlZCBmb3IgUFJPVklTSU9ORUQsIGZvcmJpZGRlbiBmb3IgUEFZX1BFUl9SRVFVRVNUKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuX3BmX2RkYmJ0X2hhc19wdChuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiKSlcXG5cXG5fcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbiMgQmlsbGluZ01vZGUg44GM44Oq44OG44Op44OrIFxcXCJQUk9WSVNJT05FRFxcXCLjgIHjgb7jgZ/jga/mnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggUFJPVklTSU9ORUTvvInjgIJcXG4jIOODiOODvOOCr+ODs+WApO+8iFJlZiDnrYnvvInjga/liKTlrprjgavkvb/jgo/jgarjgYTvvIjoqqTmpJznn6XpmLLmraLvvInjgIJcXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBzcGVjaWZpZWQgd2hlbiBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIEJpbGxpbmdNb2RlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0X3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiQmlsbGluZ01vZGUgaXMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KSBidXQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGlzIG1pc3Npbmc7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCAoUmVhZENhcGFjaXR5VW5pdHMgLyBXcml0ZUNhcGFjaXR5VW5pdHMpLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0bm90IF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXR0cmlidXRlRGVmaW5pdGlvbnMgbXVzdCBub3QgZGVmaW5lIHRoZSBzYW1lIGF0dHJpYnV0ZSB0d2ljZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2FuXSksXFxuXFx0XFxcIktlZXAgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgYXR0cmlidXRlIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0YW4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFuKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSA9PSBhblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2Vjb25kYXJ5IGluZGV4IG5hbWVzIG11c3QgYmUgdW5pcXVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJkaW5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgRHVwbGljYXRlcyB3aXRoaW4gdGhlIHNhbWUgaW5kZXggbGlzdCBvbmx5OyBhIEdTSS9MU0kgY3Jvc3MtbGlzdCBjbGFzaCB3YXNcXG4jIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkluZGV4TmFtZVxcXCIsIFtwcm9wLCBiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiSW5kZXggbmFtZSAnJXMnIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2U7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJEdXBsaWNhdGUgaW5kZXggbmFtZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgc2Vjb25kYXJ5IGluZGV4IGEgdW5pcXVlIEluZGV4TmFtZVxcXCIsXFxuXFx0X3BmX2RkYmRpbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5hbWUpXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbCkgPT0gaW5hbWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHbG9iYWxUYWJsZSBSZXBsaWNhcyBtdXN0IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gdGhlIGVuZm9yY2UgcGx1Z2luXFxuIyBrbm93cyB0aGUgYXBwJ3MgY29uY3JldGUgcmVnaW9uIChzZWUgc3JjL3ByaXZhdGUvZW5mb3JjZS50cyk7IHdpdGhvdXQgaXQgdGhlXFxuIyByZWZlcmVuY2UgaXMgdW5kZWZpbmVkIGFuZCB0aGlzIHJ1bGUgc2tpcHMuIFJlcGxpY2FzIHdpdGggdW5yZXNvbHZhYmxlXFxuIyBSZWdpb24gdmFsdWVzIGFsc28gbWFrZSB0aGUgcnVsZSBza2lwIOKAlCBhYnNlbmNlIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBSZXBsaWNhcyBsaXN0ICV2IGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uICclcyc7IENyZWF0ZUdsb2JhbFRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgUmVwbGljYXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZSBjdXJyZW50IHJlZ2lvblxcXFxcXFwiXFxcIiwgW3JlcGxpY2FzLCByZWdpb25dKSxcXG5cXHRcXFwiQWRkIGEgcmVwbGljYSBlbnRyeSBmb3IgdGhlIHJlZ2lvbiB0aGUgc3RhY2sgZGVwbG95cyB0byAoQ0RLIFRhYmxlVjIgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHkpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItZ2xvYmFsdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGl0IGluIGl0ZW1zIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpKVxcblxcdH1cXG5cXHRyZXBsaWNhcyA6PSBbciB8IHNvbWUgaXQgaW4gaXRlbXM7IHIgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpXVxcblxcdG5vdCByZWdpb24gaW4gcmVwbGljYXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR1NJIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB0YWJsZSBCaWxsaW5nTW9kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ2J0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbiMgR1NJLWxldmVsIGNvdW50ZXJwYXJ0IG9mIHBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dCAod2hpY2ggY292ZXJzIHRoZVxcbiMgdGFibGUtbGV2ZWwgcGFpciBvbmx5KS4gU2FtZSB0b2tlbiBzYWZldHk6IGxpdGVyYWwgQmlsbGluZ01vZGUgb3IgYWJzZW50XFxuIyAoZGVmYXVsdCBQUk9WSVNJT05FRCk7IHRva2VuIHZhbHVlcyBuZXZlciBqdWRnZWQuXFxuX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBzcGVjaWZpZXMgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGJ1dCBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2FuJ3QgYmUgdXNlZCB3aXRoIFBBWV9QRVJfUkVRVUVTVCBCaWxsaW5nTW9kZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgR1NJJ3MgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggdGhlIHRhYmxlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGlzIG1pc3NpbmcgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHdoaWxlIHRoZSB0YWJsZSBiaWxscyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgdG8gdGhlIEdTSSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRub3QgaXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbktleUF0dHJpYnV0ZXMgZ29lcyB3aXRoIElOQ0xVREUsIGFuZCBvbmx5IHdpdGggSU5DTFVERVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ3BuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1wcm9qZWN0aW9uLmh0bWxcXFwiXFxuXFxuIyBHU0kgcHJvamVjdGlvbnMgb25seTogdGhlIExTSSBzaGFwZSBhbmQgdGhlIEtFWVNfT05MWStOb25LZXlBdHRyaWJ1dGVzIGNvbWJvXFxuIyB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHVzZXMgUHJvamVjdGlvblR5cGUgSU5DTFVERSB3aXRob3V0IE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBJTkNMVURFLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBub3Qgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiTGlzdCB0aGUgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaW4gTm9uS2V5QXR0cmlidXRlcywgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIEFMTCAvIEtFWVNfT05MWVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSU5DTFVERVxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA9PSAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgY29tYmluZXMgUHJvamVjdGlvblR5cGUgQUxMIHdpdGggTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIEFMTCwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiRHJvcCBOb25LZXlBdHRyaWJ1dGVzIChBTEwgYWxyZWFkeSBwcm9qZWN0cyBldmVyeXRoaW5nKSwgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIElOQ0xVREVcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkFMTFxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA+IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2V5U2NoZW1hIG11c3QgYmUgW0hBU0hdIG9yIFtIQVNILCBSQU5HRV1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmtzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBUYWJsZS1sZXZlbCBrZXkgc2NoZW1hIG9ubHk6IGluZGV4IGtleSBzY2hlbWFzIHByb2R1Y2UgZGlmZmVyZW50IHNlcnZpY2VcXG4jIGVycm9ycyBhbmQgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxuX3BmX2RkYmtzaF90eXBlKG5hbWUsIGkpIDo9IGt0IGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGl0LmluZGV4ID09IGlcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjAuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGZpcnN0IEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgSEFTSCwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIGZpcnN0IEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgSEFTSCBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlB1dCB0aGUgcGFydGl0aW9uIGtleSAoS2V5VHlwZSBIQVNIKSBmaXJzdCBhbmQgdGhlIG9wdGlvbmFsIHNvcnQga2V5IChSQU5HRSkgc2Vjb25kXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAwKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiSEFTSFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMS5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgc2Vjb25kIEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgUkFOR0UsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBzZWNvbmQgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBSQU5HRSBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlVzZSBleGFjdGx5IG9uZSBIQVNIIGVsZW1lbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgb25lIFJBTkdFIGVsZW1lbnRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDEpXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJSQU5HRVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiLFxcblxcdHNwcmludGYoXFxcIktleVNjaGVtYSBjYW4gaG9sZCBhdCBtb3N0IDIgZWxlbWVudHMgKEhBU0ggKyBvcHRpb25hbCBSQU5HRSksIGdvdCAlZFxcXCIsIFtuXSksXFxuXFx0XFxcIk1vZGVsIGV4dHJhIGFjY2VzcyBwYXR0ZXJucyBhcyBnbG9iYWwgb3IgbG9jYWwgc2Vjb25kYXJ5IGluZGV4ZXMgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRuIDo9IGNvdW50KFsxIHwgc29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKV0pXFxuXFx0biA+IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG11c3QgYmUgaW4gdGhlIHRhYmxlJ3MgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBLaW5lc2lzIERhdGEgU3RyZWFtcyBkZXN0aW5hdGlvbiBtdXN0IGxpdmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZVxcbiMgdGFibGUuIFRoZSBkZXBsb3ktdGltZSBmYWlsdXJlIG1vZGUgaXMgdWdseTogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIHRoZVxcbiMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMsIGFuZCBDbG91ZEZvcm1hdGlvbiByb2xscyBiYWNrIG9uXFxuIyBOb3RTdGFiaWxpemVkIG1pbnV0ZXMgbGF0ZXIg4oCUIG5vdGhpbmcgbmFtZXMgdGhlIHJlZ2lvbiBtaXNtYXRjaC5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSBpbiBlbmZvcmNlIG1vZGUgd2l0aCBhXFxuIyBjb25jcmV0ZSByZWdpb247IG90aGVyd2lzZSB0aGlzIHJ1bGUgc2tpcHMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIEtpbmVzaXMgc3RyZWFtIGxpdmVzIGluICclcycgYnV0IHRoZSB0YWJsZSBkZXBsb3lzIHRvICclcyc7IHRoZSBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcyBhbmQgdGhlIHN0YWNrIHJvbGxzIGJhY2tcXFwiLCBbc3RyZWFtUmVnaW9uLCByZWdpb25dKSxcXG5cXHRcXFwiUG9pbnQgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuIGF0IGEgc3RyZWFtIGluIHRoZSB0YWJsZSdzIG93biByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2tkcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG5cXHRzdHJlYW1SZWdpb24gOj0gcGFydHNbM11cXG5cXHRzdHJlYW1SZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRzdHJlYW1SZWdpb24gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxTSSBrZXkgYXR0cmlidXRlcyBtdXN0IGJlIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMzkgY2hlY2tzIHRhYmxlIGFuZCBHU0kga2V5IHNjaGVtYXMgYWdhaW5zdFxcbiMgQXR0cmlidXRlRGVmaW5pdGlvbnMgYnV0IGlzIGJsaW5kIHRvIExvY2FsU2Vjb25kYXJ5SW5kZXhlcyAobWVhc3VyZWRcXG4jIDIwMjYtMDktMDIsIDEuNy4wLWJldGEpLiBUaGlzIHJ1bGUgY292ZXJzIGV4YWN0bHkgdGhhdCBnYXAuXFxuXFxuX3BmX2RkYmxhZF9kZWZzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG4jIElmIGFueSBkZWZpbml0aW9uJ3MgbmFtZSBpcyB1bnJlc29sdmFibGUgdGhlIHNldCBpcyBpbmNvbXBsZXRlIOKAlCBzdGF5IHNpbGVudC5cXG5fcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0ZXZlcnkgZCBpbiBbeCB8IHNvbWUgeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKV0ge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTFNJIGtleSBhdHRyaWJ1dGUgJyVzJyBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGluIGEgS2V5U2NoZW1hIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIkFkZCB0aGUgYXR0cmlidXRlIHRvIEF0dHJpYnV0ZURlZmluaXRpb25zIChhbmQgbm93aGVyZSBlbHNlOiBvbmx5IGtleSBhdHRyaWJ1dGVzIGJlbG9uZyB0aGVyZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRjb3VudChfcGZfZGRibGFkX2RlZnMobmFtZSkpID4gMFxcblxcdF9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJsYWRfZGVmcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIExTSSBuZWVkcyBhIFJBTkdFIGtleSBhbmQgdGhlIHRhYmxlJ3MgbGVhZGluZyBoYXNoIGtleVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRibHNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiXFxuXFxuX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykgOj0ge2t0IHxcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa3QpXFxufVxcblxcbiMgT25seSBqdWRnZSBhIGtleSBzY2hlbWEgd2hvc2UgS2V5VHlwZXMgYXJlIGFsbCBsaXRlcmFsIHN0cmluZ3MuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlKGtzKSBpZiBjb3VudChfcGZfZGRibHNoX2tleXR5cGVzKGtzKSkgPiAwXFxuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcykgaWYge1xcblxcdGV2ZXJ5IGsgaW4ga3Mge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyBoYXMgbm8gUkFOR0Uga2V5OyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgYSByYW5nZSBrZXkgZm9yIGluZGV4XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSB0aGUgTFNJIGEgc29ydCBrZXk6IFt0YWJsZSBIQVNIIGtleSwgaXRzIG93biBSQU5HRSBrZXldXFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRjb3VudChrcykgPiAwXFxuXFx0X3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcylcXG5cXHRub3QgXFxcIlJBTkdFXFxcIiBpbiBfcGZfZGRibHNoX2tleXR5cGVzKGtzKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyB1c2VzIGhhc2gga2V5ICclcycgYnV0IHRoZSB0YWJsZSdzIGhhc2gga2V5IGlzICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZWFkaW5nIGhhc2gga2V5IGFzIHRhYmxlIEtleVNjaGVtYVxcXFxcXFwiXFxcIiwgW2luYW1lLCBsc2lIYXNoLCB0YWJsZUhhc2hdKSxcXG5cXHRcXFwiQW4gTFNJIG11c3QgcmV1c2UgdGhlIHRhYmxlJ3MgcGFydGl0aW9uIGtleTsgdXNlIGEgZ2xvYmFsIHNlY29uZGFyeSBpbmRleCBmb3IgYSBkaWZmZXJlbnQgaGFzaCBrZXlcXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdHQuaW5kZXggPT0gMFxcblxcdHRhYmxlSGFzaCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFibGVIYXNoKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkhBU0hcXFwiXFxuXFx0bHNpSGFzaCA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobHNpSGFzaClcXG5cXHRsc2lIYXNoICE9IHRhYmxlSGFzaFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFibGVOYW1lIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIChtaW5pbXVtIDMgY2hhcmFjdGVycykgaXMgZW5mb3JjZWQuIFRoZSAyNTUtY2hhclxcbiMgbWF4aW11bSBhbmQgdGhlIGNoYXJhY3RlciBwYXR0ZXJuIHdlcmUgbm90IG1lYXN1cmVkLiBOb3RlIHJlc29sdmUoKSB0dXJucyBhXFxuIyBSZWYtdG8tcmVzb3VyY2UgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRDsgYSBsb2dpY2FsIElEIHNob3J0IGVub3VnaCB0b1xcbiMgdHJpcCB0aGlzIHJ1bGUgd2hpbGUgZmVlZGluZyBhIFRhYmxlTmFtZSBpcyB0cmVhdGVkIGFzIHRoZSBidWcgaXQgYWxtb3N0XFxuIyBjZXJ0YWlubHkgaXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyBzaG9ydGVyIHRoYW4gMyBjaGFyYWN0ZXJzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDNcXFxcXFxcIlxcXCIsIFt0bl0pLFxcblxcdFxcXCJVc2UgYSB0YWJsZSBuYW1lIG9mIGF0IGxlYXN0IDMgY2hhcmFjdGVycywgb3Igb21pdCBUYWJsZU5hbWUgYW5kIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhYmxlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGNvdW50KHRuKSA8IDNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItaW5zdGFuY2UtYW1pLWFyY2hcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5zdGFuY2UgdHlwZSBhcmNoaXRlY3R1cmUgbXVzdCBtYXRjaCB0aGUgU1NNIHB1YmxpYy1wYXJhbWV0ZXIgQU1JIGFyY2hpdGVjdHVyZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMmlhYV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pbnN0YW5jZS10eXBlcy5odG1sXFxcIlxcblxcbiMgR3Jhdml0b24gbmFtaW5nIGNvbnZlbnRpb246IGEgXFxcImdcXFwiIGFtb25nIHRoZSBsZXR0ZXJzIGFmdGVyIHRoZVxcbiMgZ2VuZXJhdGlvbiBkaWdpdCAodDRnLCBjN2duLCBpbTRnbiwgZzVnKSwgcGx1cyB0aGUgcHJlLWNvbnZlbnRpb24gYTEuXFxuIyBtYWMqIGZhbWlsaWVzIGFyZSBleGNsdWRlZCBmcm9tIGp1ZGdtZW50IGVudGlyZWx5Llxcbl9wZl9lYzJpYWFfYXJtX2ZhbShmYW0pIGlmIHJlZ2V4Lm1hdGNoKGBeW2Etel0rWzAtOV0rW2EtejAtOV0qZ1thLXowLTldKiRgLCBmYW0pXFxuXFxuX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSkgaWYgZmFtID09IFxcXCJhMVxcXCJcXG5cXG5fcGZfZWMyaWFhX2ZhbShuYW1lKSA6PSBmYW0gaWYge1xcblxcdGl0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcoaXQpXFxuXFx0ZmFtIDo9IHNwbGl0KGl0LCBcXFwiLlxcXCIpWzBdXFxuXFx0bm90IHN0YXJ0c3dpdGgoZmFtLCBcXFwibWFjXFxcIilcXG59XFxuXFxuIyB7e3Jlc29sdmU6c3NtOi4uLn19IHN0cmluZ3Mgc3VyZmFjZSBhcyB7XFxcIl9fZHluYW1pY1xcXCI6IFxcXCJkeW5hbWljXFxuIyByZWZlcmVuY2U6IHt7cmVzb2x2ZTpzc206PHBhdGg+fX1cXFwifSBtYXJrZXIgb2JqZWN0cyAobWVhc3VyZWRcXG4jIDIwMjYtMDktMDMpOyB0aGUgcmVmZXJlbmNlIHRleHQgaXMgcmVhZCBmcm9tIHRoZSBtYXJrZXIuXFxuX3BmX2VjMmlhYV9pbWcobmFtZSkgOj0gZCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0cmF3IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJJbWFnZUlkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocmF3KVxcblxcdGQgOj0gb2JqZWN0LmdldChyYXcsIFxcXCJfX2R5bmFtaWNcXFwiLCBcXFwiXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRjb250YWlucyhkLCBcXFwie3tyZXNvbHZlOnNzbTpcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1pbnN0YW5jZS1hbWktYXJjaFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW1hZ2VJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW5zdGFuY2UgdHlwZSAnJXMnIGlzIHg4Nl82NCBidXQgdGhlIEFNSSBwYXJhbWV0ZXIgcGF0aCBuYW1lcyBhcm02NDsgdGhlIGxhdW5jaCBmYWlscyB3aXRoIGFuIGFyY2hpdGVjdHVyZSBtaXNtYXRjaFxcXCIsIFtyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIpXSksXFxuXFx0XFxcIlVzZSBhbiBhcm02NCAoR3Jhdml0b24pIGluc3RhbmNlIHR5cGUgb3IgdGhlIHg4Nl82NCBBTUkgcGF0aFxcXCIsXFxuXFx0X3BmX2VjMmlhYV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCIpXFxuXFx0ZmFtIDo9IF9wZl9lYzJpYWFfZmFtKG5hbWUpXFxuXFx0bm90IF9wZl9lYzJpYWFfYXJtX2ZhbShmYW0pXFxuXFx0aW1nIDo9IF9wZl9lYzJpYWFfaW1nKG5hbWUpXFxuXFx0Y29udGFpbnMoaW1nLCBcXFwiYXJtNjRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1pbnN0YW5jZS1hbWktYXJjaFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW1hZ2VJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW5zdGFuY2UgdHlwZSAnJXMnIGlzIGFybTY0IChHcmF2aXRvbikgYnV0IHRoZSBBTUkgcGFyYW1ldGVyIHBhdGggbmFtZXMgeDg2XzY0OyB0aGUgbGF1bmNoIGZhaWxzIHdpdGggYW4gYXJjaGl0ZWN0dXJlIG1pc21hdGNoXFxcIiwgW3Jlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIildKSxcXG5cXHRcXFwiVXNlIGFuIHg4Nl82NCBpbnN0YW5jZSB0eXBlIG9yIHRoZSBhcm02NCBBTUkgcGF0aFxcXCIsXFxuXFx0X3BmX2VjMmlhYV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCIpXFxuXFx0ZmFtIDo9IF9wZl9lYzJpYWFfZmFtKG5hbWUpXFxuXFx0X3BmX2VjMmlhYV9hcm1fZmFtKGZhbSlcXG5cXHRpbWcgOj0gX3BmX2VjMmlhYV9pbWcobmFtZSlcXG5cXHRjb250YWlucyhpbWcsIFxcXCJ4ODZfNjRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1uYXRndy1hbGxvY2F0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5BVCBnYXRld2F5IEFsbG9jYXRpb25JZCBpcyByZXF1aXJlZCBmb3IgcHVibGljIGNvbm5lY3Rpdml0eSBhbmQgZm9yYmlkZGVuIGZvciBwcml2YXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJuZ2FfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lYzItbmF0Z2F0ZXdheS5odG1sXFxcIlxcblxcbl9wZl9lYzJuZ2FfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG4jIENvbm5lY3Rpdml0eVR5cGUgZGVmYXVsdHMgdG8gcHVibGljOyBhbiB1bnJlc29sdmFibGUgdmFsdWUgc2tpcHMgYm90aCBkaXJlY3Rpb25zLlxcbl9wZl9lYzJuZ2FfcHVibGljKG5hbWUpIGlmIF9wZl9lYzJuZ2FfYWJzZW50KG5hbWUsIFxcXCJDb25uZWN0aXZpdHlUeXBlXFxcIilcXG5cXG5fcGZfZWMybmdhX3B1YmxpYyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbm5lY3Rpdml0eVR5cGVcXFwiKSA9PSBcXFwicHVibGljXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLW5hdGd3LWFsbG9jYXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG9jYXRpb25JZFxcXCIsXFxuXFx0XFxcIkEgcHJpdmF0ZSBOQVQgZ2F0ZXdheSBjYW5ub3QgdGFrZSBBbGxvY2F0aW9uSWQgKFxcXFxcXFwiQWxsb2NhdGlvbklkIGNhbm5vdCBiZSBzcGVjaWZpZWQgZm9yIGEgTkFUIEdhdGV3YXkgd2l0aCBDb25uZWN0aXZpdHkgVHlwZSBwcml2YXRlLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBBbGxvY2F0aW9uSWQsIG9yIHN3aXRjaCBDb25uZWN0aXZpdHlUeXBlIHRvIHB1YmxpY1xcXCIsXFxuXFx0X3BmX2VjMm5nYV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpOYXRHYXRld2F5XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbm5lY3Rpdml0eVR5cGVcXFwiKSA9PSBcXFwicHJpdmF0ZVxcXCJcXG5cXHRub3QgX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwgXFxcIkFsbG9jYXRpb25JZFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLW5hdGd3LWFsbG9jYXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG9jYXRpb25JZFxcXCIsXFxuXFx0XFxcIkEgcHVibGljIE5BVCBnYXRld2F5IHJlcXVpcmVzIEFsbG9jYXRpb25JZCAoXFxcXFxcXCJUaGUgcmVxdWVzdCBtdXN0IGluY2x1ZGUgdGhlIEFsbG9jYXRpb25JZCBwYXJhbWV0ZXIuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiQWxsb2NhdGUgYW4gRUlQIGFuZCBwYXNzIGl0cyBBbGxvY2F0aW9uSWQsIG9yIHNldCBDb25uZWN0aXZpdHlUeXBlOiBwcml2YXRlXFxcIixcXG5cXHRfcGZfZWMybmdhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcXFwiKVxcblxcdF9wZl9lYzJuZ2FfcHVibGljKG5hbWUpXFxuXFx0X3BmX2VjMm5nYV9hYnNlbnQobmFtZSwgXFxcIkFsbG9jYXRpb25JZFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXBnLWNsdXN0ZXItYnVyc3RhYmxlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJ1cnN0YWJsZSBpbnN0YW5jZSB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBjbHVzdGVyIHBsYWNlbWVudCBncm91cHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6UGxhY2VtZW50R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENyb3NzLXJlc291cmNlOiBvbmx5IGZpcmVzIHdoZW4gdGhlIHJlZmVyZW5jZWQgcGxhY2VtZW50IGdyb3VwIGlzIGluXFxuIyB0aGUgdGVtcGxhdGUgd2l0aCBTdHJhdGVneSBjbHVzdGVyLiBBIGxpdGVyYWwgKHByZS1leGlzdGluZykgZ3JvdXBcXG4jIG5hbWUgY2FycmllcyBubyBzdHJhdGVneSBpbmZvcm1hdGlvbiBhbmQgc3RheXMgc2lsZW50Llxcbl9wZl9lYzJwZ2JfYnVyc3RhYmxlKGZhbSkgaWYgZmFtIGluIHtcXFwidDJcXFwiLCBcXFwidDNcXFwiLCBcXFwidDNhXFxcIiwgXFxcInQ0Z1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItcGctY2x1c3Rlci1idXJzdGFibGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2x1c3RlciBwbGFjZW1lbnQgZ3JvdXBzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAnJXMnIGluc3RhbmNlIHR5cGU7IHRoZSBsYXVuY2ggZmFpbHMgYXQgZGVwbG95XFxcIiwgW2l0XSksXFxuXFx0XFxcIlVzZSBhIG5vbi1idXJzdGFibGUgdHlwZSwgb3IgYSBzcHJlYWQvcGFydGl0aW9uIHBsYWNlbWVudCBncm91cFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9wbGFjZW1lbnQtZ3JvdXBzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiKVxcblxcdGl0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcoaXQpXFxuXFx0X3BmX2VjMnBnYl9idXJzdGFibGUoc3BsaXQoaXQsIFxcXCIuXFxcIilbMF0pXFxuXFx0cGcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QbGFjZW1lbnRHcm91cE5hbWVcXFwiKVxcblxcdHBnIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6UGxhY2VtZW50R3JvdXBcXFwiKVxcblxcdHJlc29sdmUocGcsIFxcXCJQcm9wZXJ0aWVzLlN0cmF0ZWd5XFxcIikgPT0gXFxcImNsdXN0ZXJcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXJvdXRlLXRhcmdldC1leGFjdGx5LW9uZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJvdXRlIG11c3QgbmFtZSBleGFjdGx5IG9uZSB0YXJnZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpSb3V0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIDExIHRhcmdldCBwcm9wZXJ0aWVzLCBzdHJhaWdodCBmcm9tIHRoZSBFQzIgZXJyb3IgbWVzc2FnZS5cXG5fcGZfZWMycnRlX3RhcmdldHMgOj0gW1xcXCJHYXRld2F5SWRcXFwiLCBcXFwiTG9jYWxHYXRld2F5SWRcXFwiLCBcXFwiQ2FycmllckdhdGV3YXlJZFxcXCIsIFxcXCJOYXRHYXRld2F5SWRcXFwiLCBcXFwiTmV0d29ya0ludGVyZmFjZUlkXFxcIiwgXFxcIlZwY1BlZXJpbmdDb25uZWN0aW9uSWRcXFwiLCBcXFwiRWdyZXNzT25seUludGVybmV0R2F0ZXdheUlkXFxcIiwgXFxcIlRyYW5zaXRHYXRld2F5SWRcXFwiLCBcXFwiVnBjRW5kcG9pbnRJZFxcXCIsIFxcXCJDb3JlTmV0d29ya0FyblxcXCIsIFxcXCJJbnN0YW5jZUlkXFxcIl1cXG5cXG5fcGZfZWMycnRlX2NvdW50KG5hbWUpIDo9IG4gaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG4gOj0gY291bnQoW2sgfCBzb21lIGsgaW4gX3BmX2VjMnJ0ZV90YXJnZXRzOyBvYmplY3QuZ2V0KHByb3BzLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItcm91dGUtdGFyZ2V0LWV4YWN0bHktb25lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJvdXRlIG5hbWVzICV2IHRhcmdldHM7IEVDMiByZXF1aXJlcyBleGFjdGx5IG9uZSBvZiBHYXRld2F5SWQsIExvY2FsR2F0ZXdheUlkLCBDYXJyaWVyR2F0ZXdheUlkLCBOYXRHYXRld2F5SWQsIE5ldHdvcmtJbnRlcmZhY2VJZCwgVnBjUGVlcmluZ0Nvbm5lY3Rpb25JZCwgRWdyZXNzT25seUludGVybmV0R2F0ZXdheUlkLCBUcmFuc2l0R2F0ZXdheUlkLCBWcGNFbmRwb2ludElkLCBDb3JlTmV0d29ya0FybiBvciBJbnN0YW5jZUlkXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IGV4YWN0bHkgb25lIHRhcmdldCBwcm9wZXJ0eSBvbiB0aGUgcm91dGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lYzItcm91dGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpSb3V0ZVxcXCIpXFxuXFx0biA6PSBfcGZfZWMycnRlX2NvdW50KG5hbWUpXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXNnLWNpZHItdmFsaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VjdXJpdHkgZ3JvdXAgcnVsZSBDaWRySXAgbXVzdCBiZSBhIHdlbGwtZm9ybWVkIElQdjQgQ0lEUlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnNjdl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfZWMyc2N2X21hbGZvcm1lZChjKSBpZiB7XFxuXFx0cmVnZXgubWF0Y2goYF5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsvWzAtOV0rJGAsIGMpXFxuXFx0dG9fbnVtYmVyKHNwbGl0KGMsIFxcXCIvXFxcIilbMV0pID4gMzJcXG59XFxuXFxuX3BmX2VjMnNjdl9tYWxmb3JtZWQoYykgaWYge1xcblxcdHJlZ2V4Lm1hdGNoKGBeWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rL1swLTldKyRgLCBjKVxcblxcdHNvbWUgbyBpbiBzcGxpdChzcGxpdChjLCBcXFwiL1xcXCIpWzBdLCBcXFwiLlxcXCIpXFxuXFx0dG9fbnVtYmVyKG8pID4gMjU1XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLWNpZHItdmFsaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuQ2lkcklwXFxcIiwgW2RpciwgaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNpZHJJcCAnJXMnIGlzIG1hbGZvcm1lZCAob2N0ZXRzIG11c3QgYmUgMC0yNTUsIHByZWZpeCAwLTMyKTsgRUMyIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkNJRFIgYmxvY2sgJXMgaXMgbWFsZm9ybWVkXFxcXFxcXCJcXFwiLCBbYywgY10pLFxcblxcdFxcXCJGaXggdGhlIENJRFIgbm90YXRpb25cXFwiLFxcblxcdF9wZl9lYzJzY3ZfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRjIDo9IG9iamVjdC5nZXQoZW50cnksIFxcXCJDaWRySXBcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhjKVxcblxcdF9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLWNpZHItdmFsaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNpZHJJcFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2lkcklwICclcycgaXMgbWFsZm9ybWVkIChvY3RldHMgbXVzdCBiZSAwLTI1NSwgcHJlZml4IDAtMzIpOyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQ0lEUiBibG9jayAlcyBpcyBtYWxmb3JtZWRcXFxcXFxcIlxcXCIsIFtjLCBjXSksXFxuXFx0XFxcIkZpeCB0aGUgQ0lEUiBub3RhdGlvblxcXCIsXFxuXFx0X3BmX2VjMnNjdl91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNpZHJJcFxcXCIpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0X3BmX2VjMnNjdl9tYWxmb3JtZWQoYylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctZ3JvdXAtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBuYW1lcyBtYXkgbm90IHN0YXJ0IHdpdGggc2ctXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLWdyb3VwLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkdyb3VwTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiR3JvdXBOYW1lICclcycgc3RhcnRzIHdpdGggdGhlIHJlc2VydmVkIHByZWZpeDsgRUMyIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkdyb3VwIG5hbWVzIG1heSBub3QgYmUgaW4gdGhlIGZvcm1hdCBzZy0qXFxcXFxcXCJcXFwiLCBbZ25dKSxcXG5cXHRcXFwiUGljayBhIG5hbWUgdGhhdCBkb2VzIG5vdCBzdGFydCB3aXRoIHNnLVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VjdXJpdHlHcm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdGduIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuR3JvdXBOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoZ24pXFxuXFx0c3RhcnRzd2l0aChnbiwgXFxcInNnLVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VjdXJpdHkgZ3JvdXAgVENQL1VEUCBwb3J0cyBtdXN0IGJlIHdpdGhpbiAwLTY1NTM1IGFuZCBGcm9tUG9ydCA8PSBUb1BvcnRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZ19maXggOj0gXFxcIlVzZSBhIHBvcnQgYmV0d2VlbiAwIGFuZCA2NTUzNSB3aXRoIEZyb21Qb3J0IDw9IFRvUG9ydFxcXCJcXG5cXG5fcGZfc2dfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0F1dGhvcml6ZVNlY3VyaXR5R3JvdXBJbmdyZXNzLmh0bWxcXFwiXFxuXFxuX3BmX3BvcnRfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX3BvcnRfb3V0KG4pIGlmIG4gPiA2NTUzNVxcblxcbl9wZl90Y3BfdWRwKHApIGlmIHAgaW4ge1xcXCJ0Y3BcXFwiLCBcXFwidWRwXFxcIiwgXFxcIjZcXFwiLCBcXFwiMTdcXFwiLCA2LCAxN31cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLiVzXFxcIiwgW2RpciwgaXRlbS5pbmRleCwgcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdF9wZl90Y3BfdWRwKG9iamVjdC5nZXQoZW50cnksIFxcXCJJcFByb3RvY29sXFxcIiwgbnVsbCkpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIob2JqZWN0LmdldChlbnRyeSwgcG5hbWUsIG51bGwpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkZyb21Qb3J0XFxcIiwgW2RpciwgaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkZyb21Qb3J0ICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gVG9Qb3J0ICgldilcXFwiLCBbZiwgdF0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdF9wZl90Y3BfdWRwKG9iamVjdC5nZXQoZW50cnksIFxcXCJJcFByb3RvY29sXFxcIiwgbnVsbCkpXFxuXFx0ZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChlbnRyeSwgXFxcIkZyb21Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0dCA6PSB0b19udW1iZXIob2JqZWN0LmdldChlbnRyeSwgXFxcIlRvUG9ydFxcXCIsIG51bGwpKVxcblxcdGYgPj0gMFxcblxcdHQgPD0gNjU1MzVcXG5cXHRmID4gdFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgb3V0c2lkZSB0aGUgdmFsaWQgVENQL1VEUCBwb3J0IHJhbmdlIDAtNjU1MzVcXFwiLCBbcG5hbWUsIG5dKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdF9wZl90Y3BfdWRwKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSXBQcm90b2NvbFxcXCIpKVxcblxcdHNvbWUgcG5hbWUgaW4ge1xcXCJGcm9tUG9ydFxcXCIsIFxcXCJUb1BvcnRcXFwifVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwbmFtZV0pKSlcXG5cXHRfcGZfcG9ydF9vdXQobilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRnJvbVBvcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIkZyb21Qb3J0ICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gVG9Qb3J0ICgldilcXFwiLCBbZiwgdF0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0ZiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIpKVxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9Qb3J0XFxcIikpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBzZWN1cml0eSBncm91cCBydWxlIHRha2VzIGV4YWN0bHkgb25lIHNvdXJjZS9kZXN0aW5hdGlvbiBmaWVsZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnNzZV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG4jIFRoZSBtZW1iZXIgc2V0cyBjb21lIHZlcmJhdGltIGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlcy5cXG5fcGZfZWMyc3NlX3NldHMgOj0ge1xcXCJpblxcXCI6IFtcXFwiQ2lkcklwXFxcIiwgXFxcIkNpZHJJcHY2XFxcIiwgXFxcIlNvdXJjZVNlY3VyaXR5R3JvdXBJZFxcXCIsIFxcXCJTb3VyY2VQcmVmaXhMaXN0SWRcXFwiXSwgXFxcIm91dFxcXCI6IFtcXFwiQ2lkcklwXFxcIiwgXFxcIkNpZHJJcHY2XFxcIiwgXFxcIkRlc3RpbmF0aW9uUHJlZml4TGlzdElkXFxcIiwgXFxcIkRlc3RpbmF0aW9uU2VjdXJpdHlHcm91cElkXFxcIl19XFxuXFxuX3BmX2VjMnNzZV9kaXJrZXkgOj0ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCI6IFxcXCJpblxcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIjogXFxcIm91dFxcXCJ9XFxuXFxuX3BmX2VjMnNzZV9ya2V5IDo9IHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIjogXFxcImluXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIjogXFxcIm91dFxcXCJ9XFxuXFxuX3BmX2VjMnNzZV9jb3VudChlbnRyeSwgc2V0a2V5KSA6PSBuIGlmIHtcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMyc3NlX3NldHNbc2V0a2V5XTsgb2JqZWN0LmdldChlbnRyeSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxufVxcblxcbiMgRW1iZWRkZWQgcnVsZXM6IHR3byBvciBtb3JlIG1lbWJlcnMgaXMgYW4gZXJyb3I7IHplcm8gaXMgdG9sZXJhdGVkXFxuIyAoYSBzb3VyY2UtbGVzcyBlbWJlZGRlZCBpbmdyZXNzIGRlcGxveWVkIGNsZWFuIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJ1bGUgc2V0cyAldiBvZiAldjsgRUMyIGFsbG93cyBvbmx5IG9uZSAoXFxcXFxcXCJPbmx5IG9uZSBvZiAlcyBjYW4gYmUgc3BlY2lmaWVkXFxcXFxcXCIpXFxcIiwgW24sIF9wZl9lYzJzc2Vfc2V0c1trXSwgY29uY2F0KFxcXCIsIFxcXCIsIF9wZl9lYzJzc2Vfc2V0c1trXSldKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGQgb24gdGhlIHJ1bGVcXFwiLFxcblxcdF9wZl9lYzJzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ayA6PSBfcGZfZWMyc3NlX2RpcmtleVtkaXJdXFxuXFx0biA6PSBfcGZfZWMyc3NlX2NvdW50KGl0ZW0udmFsdWUsIGspXFxuXFx0biA+PSAyXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcnVsZSBzZXRzICV2IG9mICV2OyBFQzIgcmVxdWlyZXMgZXhhY3RseSBvbmUgKFxcXFxcXFwiRXhhY3RseSBvbmUgb2YgJXMgbXVzdCBiZSBzcGVjaWZpZWQgYW5kIG5vdCBlbXB0eVxcXFxcXFwiKVxcXCIsIFtuLCBfcGZfZWMyc3NlX3NldHNba10sIGNvbmNhdChcXFwiLCBcXFwiLCBfcGZfZWMyc3NlX3NldHNba10pXSksXFxuXFx0XFxcIlNldCBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGQgb24gdGhlIHJ1bGUgcmVzb3VyY2VcXFwiLFxcblxcdF9wZl9lYzJzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGsgOj0gX3BmX2VjMnNzZV9ya2V5W3J0eXBlXVxcblxcdG4gOj0gX3BmX2VjMnNzZV9jb3VudChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgaylcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQzIgdXNlciBkYXRhIGlzIGxpbWl0ZWQgdG8gMTYzODQgYnl0ZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdWRzel9maXggOj0gXFxcIktlZXAgdXNlciBkYXRhIHVuZGVyIDE2Mzg0IGJ5dGVzOyBtb3ZlIGxhcmdlIHBheWxvYWRzIHRvIFMzIGFuZCBmZXRjaCB0aGVtIGZyb20gYSBzbWFsbCBib290c3RyYXAgc2NyaXB0XFxcIlxcblxcbl9wZl91ZHN6X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlZGF0YS1hZGQtdXNlci1kYXRhLmh0bWxcXFwiXFxuXFxuX3BmX3Vkc3pfbGltaXQgOj0gMTYzODRcXG5cXG4jIGJhc2U2NCDmloflrZfliJfjga7jg4fjgrPjg7zjg4nlvozjg5DjgqTjg4jmlbDvvIjjg5Hjg4fjgqPjg7PjgrDogIPmha7vvIlcXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9ICgoY291bnQocykgKiAzKSAvIDQpIC0gMiBpZiBlbmRzd2l0aChzLCBcXFwiPT1cXFwiKVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAxIGlmIHtcXG5cXHRlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFx0bm90IGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxufVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKGNvdW50KHMpICogMykgLyA0IGlmIG5vdCBlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFxuX3BmX3Vkc3pfcGF0aHMgOj0ge1xcblxcdFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiOiBcXFwiUHJvcGVydGllcy5Vc2VyRGF0YVxcXCIsXFxuXFx0XFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlRGF0YS5Vc2VyRGF0YVxcXCIsXFxufVxcblxcbiMgVXNlckRhdGEg44GM44Oq44OG44Op44OrIGJhc2U2NCDmloflrZfliJfjga7jgrHjg7zjgrlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi11c2VyZGF0YS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgcCxcXG5cXHRzcHJpbnRmKFxcXCJVc2VyRGF0YSBkZWNvZGVzIHRvIGFib3V0ICV2IGJ5dGVzLCBidXQgRUMyIGxpbWl0cyB1c2VyIGRhdGEgdG8gJWQgYnl0ZXM7IFJ1bkluc3RhbmNlcyBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtzaXplLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfc3RyaW5nKHVkKVxcblxcdHNpemUgOj0gX3BmX3Vkc3pfZGVjb2RlZCh1ZClcXG5cXHRzaXplID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYwge1xcXCJGbjo6QmFzZTY0XFxcIjogXFxcIjxsaXRlcmFsPlxcXCJ9IOOBruOCseODvOOCue+8iOOCqOODs+OCs+ODvOODieWJjeOBrueUn+ODkOOCpOODiOaVsOOBp+WIpOWumu+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGlzICVkIGJ5dGVzIGJlZm9yZSBiYXNlNjQgZW5jb2RpbmcsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW2NvdW50KGlubmVyKSwgX3BmX3Vkc3pfbGltaXRdKSxcXG5cXHRfcGZfdWRzel9maXgsIF9wZl91ZHN6X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUsIHAgaW4gX3BmX3Vkc3pfcGF0aHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0dWQgOj0gcmVzb2x2ZShuYW1lLCBwKVxcblxcdGlzX29iamVjdCh1ZClcXG5cXHRpbm5lciA6PSBvYmplY3QuZ2V0KHVkLCBcXFwiRm46OkJhc2U2NFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlubmVyKVxcblxcdGNvdW50KGlubmVyKSA+IF9wZl91ZHN6X2xpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVCUyBJb3BzL1Rocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdm9sdW1lIHR5cGUncyBzdXBwb3J0ZWQgcmFuZ2VzIGFuZCByYXRpb3NcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdm9saW9wc19maXggOj0gXFxcIk1hdGNoIElvcHMvVGhyb3VnaHB1dCB0byB0aGUgdm9sdW1lIHR5cGU6IGdwMyAzMDAwLTgwMDAwIElPUFMgKG1heCA1MDAvR2lCLCB0aHJvdWdocHV0IDEyNS0yMDAwIE1pQi9zIGFuZCBhdCBtb3N0IElPUFMvNCksIGlvMSAxMDAtNjQwMDAgKG1heCA1MC9HaUIpLCBpbzIgMTAwLTI1NjAwMCAobWF4IDEwMDAvR2lCKTsgZ3AyL3N0MS9zYzEvc3RhbmRhcmQgYWNjZXB0IG5laXRoZXIgcHJvcGVydHlcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sXFxcIlxcblxcbl9wZl92b2xpb3BzX3JhbmdlIDo9IHtcXFwiZ3AzXFxcIjogWzMwMDAsIDgwMDAwXSwgXFxcImlvMVxcXCI6IFsxMDAsIDY0MDAwXSwgXFxcImlvMlxcXCI6IFsxMDAsIDI1NjAwMF19XFxuXFxuX3BmX3ZvbGlvcHNfcGVyX2dpYiA6PSB7XFxcImdwM1xcXCI6IDUwMCwgXFxcImlvMVxcXCI6IDUwLCBcXFwiaW8yXFxcIjogMTAwMH1cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuIDwgbG9cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuID4gaGlcXG5cXG5fcGZfdm9saW9wc19oYXNfaW9wcyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKVxcblxcbiMgSU9QUyDjgYzlnovjgZTjgajjga7ntbblr77jg6zjg7PjgrjlpJZcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgaXMgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlICVkLSVkIGZvciAlcyB2b2x1bWVzXFxcIiwgW24sIHJbMF0sIHJbMV0sIHZ0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0ciA6PSBfcGZfdm9saW9wc19yYW5nZVt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQobiwgclswXSwgclsxXSlcXG59XFxuXFxuIyBJT1BTIDog44K144Kk44K65q+U44Gu6LaF6YGOXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgJWQgSU9QUyBwZXIgR2lCIGZvciAlcyAoU2l6ZSAldiBHaUIgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW24sIHJhdGlvLCB2dCwgcywgcyAqIHJhdGlvXSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0cmF0aW8gOj0gX3BmX3ZvbGlvcHNfcGVyX2dpYlt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiKSlcXG5cXHRuID4gcyAqIHJhdGlvXFxufVxcblxcbiMgSW9wcyDjgpLlj5fjgZHku5jjgZHjgarjgYTlnovjgasgSW9wcyDjgpLmjIflrppcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMgdm9sdW1lcyAodmFsaWQgb25seSBmb3IgZ3AzLCBpbzEsIGlvMik7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiZ3AyXFxcIiwgXFxcInN0MVxcXCIsIFxcXCJzYzFcXFwiLCBcXFwic3RhbmRhcmRcXFwifVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxufVxcblxcbiMgVGhyb3VnaHB1dCDjga8gZ3AzIOWwgueUqFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMpOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGxcXFwiLCBbdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcodnQpXFxuXFx0dnQgIT0gXFxcImdwM1xcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IOOBrue1tuWvvuODrOODs+OCuFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgMTI1LTIwMDAgZm9yIGdwMyB2b2x1bWVzXFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQodCwgMTI1LCAyMDAwKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IDogSU9QUyDmr5TvvIjmnIDlpKcgMC4yNSBNaUIvcyBwZXIgSU9QU++8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBleGNlZWRzIHRoZSBtYXhpbXVtIHJhdGlvIG9mIDAuMjUgTWlCL3MgcGVyIHByb3Zpc2lvbmVkIElPUFMgKCV2IElPUFMgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW3QsIG4sIG4gLyA0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0dCAqIDQgPiBuXFxufVxcblxcbiMgZ3AzIOOBpyBJb3BzIOacquaMh+Wumu+8iOODh+ODleOCqeODq+ODiCAzMDAw77yJ44Gu44Go44GN44GuIFRocm91Z2hwdXQg5q+UXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgNzUwLCB0aGUgbWF4aW11bSBmb3IgdGhlIGRlZmF1bHQgMzAwMCBJT1BTICgwLjI1IE1pQi9zIHBlciBJT1BTKTsgcHJvdmlzaW9uIElvcHMgZXhwbGljaXRseSBvciBsb3dlciB0aGUgdGhyb3VnaHB1dFxcXCIsIFt0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0bm90IF9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0dCA+IDc1MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUtaW9wcy1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJpbzEgYW5kIGlvMiB2b2x1bWVzIHJlcXVpcmUgdGhlIElvcHMgcHJvcGVydHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIHBmLWVjMi12b2x1bWUtaW9wcyB2YWxpZGF0ZXMgSW9wcyB2YWx1ZXM7IHRoaXMgcnVsZSBjb3ZlcnMgdGhlXFxuIyBjb25kaXRpb25hbCByZXF1aXJlbWVudCAoYWJzZW5jZSkgdGhhdCB0aGUgc2NoZW1hIGNhbm5vdCBleHByZXNzLlxcbl9wZl9lYzJ2aXJfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wcy1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJXMgdm9sdW1lcyByZXF1aXJlIElvcHM7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbCB3aXRoIFxcXFxcXFwiVGhlIHBhcmFtZXRlciBpb3BzIG11c3QgYmUgc3BlY2lmaWVkIGZvciAlcyB2b2x1bWVzLlxcXFxcXFwiXFxcIiwgW3Z0LCB2dF0pLFxcblxcdFxcXCJTZXQgSW9wcyAoaW8xOiAxMDAtNjQwMDAsIGlvMjogMTAwLTI1NjAwMClcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHR2dCBpbiB7XFxcImlvMVxcXCIsIFxcXCJpbzJcXFwifVxcblxcdF9wZl9lYzJ2aXJfYWJzZW50KG5hbWUsIFxcXCJJb3BzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWttcy1lbmNyeXB0ZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS21zS2V5SWQgb24gYSB2b2x1bWUgcmVxdWlyZXMgRW5jcnlwdGVkIHRvIGJlIHRydWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydmtlX2JhZChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkVuY3J5cHRlZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2VjMnZrZV9iYWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmNyeXB0ZWRcXFwiKSA9PSBmYWxzZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1rbXMtZW5jcnlwdGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LbXNLZXlJZFxcXCIsXFxuXFx0XFxcIkttc0tleUlkIGlzIHNldCBidXQgRW5jcnlwdGVkIGlzIG5vdCB0cnVlOyBFQzIgcmVqZWN0cyB0aGUgdm9sdW1lIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVyIFtLbXNLZXlJZF0gcmVxdWlyZXMgdGhlIHBhcmFtZXRlciBFbmNyeXB0ZWQgdG8gYmUgc2V0LlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEVuY3J5cHRlZDogdHJ1ZSBhbG9uZ3NpZGUgS21zS2V5SWRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkttc0tleUlkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdF9wZl9lYzJ2a2VfYmFkKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1zaXplLW1pbmltdW1cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUJTIHZvbHVtZSBzaXplIG11c3QgbWVldCB0aGUgdm9sdW1lIHR5cGUgbWluaW11bSAoaW8xL2lvMiA0IEdpQiwgc3QxL3NjMSAxMjUgR2lCKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSBtaW5pbXVtczogdGhlIGhpc3RvcmljYWwgMTYzODQgR2lCIG1heGltdW0gbm8gbG9uZ2VyIGhvbGRzXFxuIyAoYSAxNzAwMCBHaUIgZ3AzIGRlcGxveWVkIGNsZWFuIG9uIDIwMjYtMDktMDMpLlxcbl9wZl9lYzJ2c21fbWluIDo9IHtcXFwiaW8xXFxcIjogNCwgXFxcImlvMlxcXCI6IDQsIFxcXCJzdDFcXFwiOiAxMjUsIFxcXCJzYzFcXFwiOiAxMjV9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLXNpemUtbWluaW11bVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiU2l6ZSAldiBHaUIgaXMgYmVsb3cgdGhlICV2IEdpQiBtaW5pbXVtIGZvciAlcyB2b2x1bWVzIChcXFxcXFxcIiVzIHZvbHVtZXMgbXVzdCBiZSBhdCBsZWFzdCAldiBHaUIgaW4gc2l6ZS5cXFxcXFxcIilcXFwiLCBbcywgbW4sIHZ0LCB2dCwgbW5dKSxcXG5cXHRcXFwiUmFpc2UgU2l6ZSB0byB0aGUgdm9sdW1lIHR5cGUgbWluaW11bVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdG1uIDo9IF9wZl9lYzJ2c21fbWluW3Z0XVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIpKVxcblxcdHMgPCBtblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGMtY2lkci1ibG9jay1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlZQQyBJUHY0IENJRFIgYmxvY2sgbmV0bWFzayBtdXN0IGJlIGJldHdlZW4gLzE2IGFuZCAvMjhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUgdmFsaWRhdGVzIHN1Ym5ldCBjb250YWlubWVudCAoRTMwNTkpIGFuZCBvdmVybGFwIChFMzA2MClcXG4jIGJ1dCBhY2NlcHRzIGFueSBWUEMgbmV0bWFzazsgRUMyIHJlamVjdHMgYW55dGhpbmcgb3V0c2lkZSAvMTYuLi8yOC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12cGMtY2lkci1ibG9jay1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DaWRyQmxvY2tcXFwiLFxcblxcdHNwcmludGYoXFxcIlZQQyBDSURSIGJsb2NrICclcycgaGFzIG5ldG1hc2sgLyV2OyBFQzIgb25seSBhY2NlcHRzIC8xNiB0aHJvdWdoIC8yOCAoXFxcXFxcXCJUaGUgQ0lEUiAnJXMnIGlzIGludmFsaWQuXFxcXFxcXCIpXFxcIiwgW2MsIHAsIGNdKSxcXG5cXHRcXFwiVXNlIGEgbmV0bWFzayBiZXR3ZWVuIC8xNiBhbmQgLzI4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ1xcXCIpXFxuXFx0YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0cmVnZXgubWF0Y2goYF5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsvWzAtOV0rJGAsIGMpXFxuXFx0cCA6PSB0b19udW1iZXIoc3BsaXQoYywgXFxcIi9cXFwiKVsxXSlcXG5cXHRfcGZfZWMydmNzX291dChwKVxcbn1cXG5cXG5fcGZfZWMydmNzX291dChwKSBpZiBwIDwgMTZcXG5cXG5fcGZfZWMydmNzX291dChwKSBpZiBwID4gMjhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGNlLWdhdGV3YXktc2VydmljZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHYXRld2F5IFZQQyBlbmRwb2ludHMgb25seSBleGlzdCBmb3IgUzMgYW5kIER5bmFtb0RCXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFZwY0VuZHBvaW50VHlwZSBkZWZhdWx0cyB0byBHYXRld2F5IChtZWFzdXJlZDogYSB0eXBlLWxlc3MgZW5kcG9pbnRcXG4jIGZhaWxzIHdpdGggXFxcIkVuZHBvaW50IHR5cGUgKEdhdGV3YXkpIC4uLlxcXCIgbWVzc2FnZXMpLlxcbl9wZl9lYzJ2Z3NfZ2F0ZXdheShuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0VuZHBvaW50VHlwZVxcXCIsIFxcXCJHYXRld2F5XFxcIikgPT0gXFxcIkdhdGV3YXlcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtZ2F0ZXdheS1zZXJ2aWNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiT25seSBTMyBhbmQgRHluYW1vREIgb2ZmZXIgR2F0ZXdheSBlbmRwb2ludHM7IFxcXFxcXFwiJXNcXFxcXFxcIiBmYWlscyB3aXRoIFxcXFxcXFwiRW5kcG9pbnQgdHlwZSAoR2F0ZXdheSkgZG9lcyBub3QgbWF0Y2ggYXZhaWxhYmxlIHNlcnZpY2UgdHlwZXNcXFxcXFxcIlxcXCIsIFtjb25jYXQoXFxcIi5cXFwiLCBwYXJ0cyldKSxcXG5cXHRcXFwiVXNlIGNvbS5hbWF6b25hd3MuPHJlZ2lvbj4uczMgb3IgLmR5bmFtb2RiLCBvciBzd2l0Y2ggVnBjRW5kcG9pbnRUeXBlIHRvIEludGVyZmFjZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3ByaXZhdGVsaW5rL2dhdGV3YXktZW5kcG9pbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdF9wZl9lYzJ2Z3NfZ2F0ZXdheShuYW1lKVxcblxcdHNuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhzbilcXG5cXHRwYXJ0cyA6PSBzcGxpdChzbiwgXFxcIi5cXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSA0XFxuXFx0cGFydHNbMF0gPT0gXFxcImNvbVxcXCJcXG5cXHRwYXJ0c1sxXSA9PSBcXFwiYW1hem9uYXdzXFxcIlxcblxcdG5vdCBwYXJ0c1szXSBpbiB7XFxcInMzXFxcIiwgXFxcImR5bmFtb2RiXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdnBjZS1zZXJ2aWNlLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJWUEMgZW5kcG9pbnQgc2VydmljZSBuYW1lcyBtdXN0IHVzZSB0aGUgZGVwbG95IHJlZ2lvbiB1bmxlc3MgU2VydmljZVJlZ2lvbiBpcyBzZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2c3JfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC9wcml2YXRlbGluay9wcml2YXRlbGluay1hY2Nlc3MtYXdzLXNlcnZpY2VzLmh0bWxcXFwiXFxuXFxuIyBPbmx5IGNvbS5hbWF6b25hd3MuPHJlZ2lvbj4uPHNlcnZpY2U+IG5hbWVzIHdoZXJlIHRoZSB0aGlyZCBzZWdtZW50IGlzXFxuIyByZWdpb24tc2hhcGVkOyBuYW1lcyBsaWtlIGNvbS5hbWF6b25hd3MuczMtZ2xvYmFsLmFjY2Vzc3BvaW50IHN0YXkgb3V0Llxcbl9wZl9lYzJ2c3JfcGFydHMobmFtZSkgOj0gcGFydHMgaWYge1xcblxcdHNuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhzbilcXG5cXHRwYXJ0cyA6PSBzcGxpdChzbiwgXFxcIi5cXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSA0XFxuXFx0cGFydHNbMF0gPT0gXFxcImNvbVxcXCJcXG5cXHRwYXJ0c1sxXSA9PSBcXFwiYW1hem9uYXdzXFxcIlxcblxcdHJlZ2V4Lm1hdGNoKGBeW2Etel17Mn0oLVthLXpdKykrLVswLTldKyRgLCBwYXJ0c1syXSlcXG59XFxuXFxuX3BmX2VjMnZzcl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2Utc2VydmljZS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFbmRwb2ludCBzZXJ2aWNlICclcycgbmFtZXMgcmVnaW9uICVzIGJ1dCB0aGlzIHN0YWNrIGRlcGxveXMgdG8gJXM7IHdpdGhvdXQgU2VydmljZVJlZ2lvbiB0aGUgbG9va3VwIGlzIHJlZ2lvbmFsIGFuZCB0aGUgY3JlYXRlIGZhaWxzXFxcIiwgW2NvbmNhdChcXFwiLlxcXCIsIHBhcnRzKSwgcGFydHNbMl0sIHJlZ2lvbl0pLFxcblxcdFxcXCJVc2UgY29tLmFtYXpvbmF3cy48ZGVwbG95LXJlZ2lvbj4uPHNlcnZpY2U+LCBvciBzZXQgU2VydmljZVJlZ2lvbiBmb3IgY3Jvc3MtcmVnaW9uIFByaXZhdGVMaW5rXFxcIixcXG5cXHRfcGZfZWMydnNyX3VybCkgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRwYXJ0cyA6PSBfcGZfZWMydnNyX3BhcnRzKG5hbWUpXFxuXFx0cGFydHNbMl0gIT0gcmVnaW9uXFxuXFx0X3BmX2VjMnZzcl9hYnNlbnQobmFtZSwgXFxcIlNlcnZpY2VSZWdpb25cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGNlLXR5cGUtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN1Ym5ldElkcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBHYXRld2F5IGVuZHBvaW50cyAoYW5kIFJvdXRlVGFibGVJZHMgb25seSBvbiBHYXRld2F5KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZ0Y191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi12cGNlbmRwb2ludC5odG1sXFxcIlxcblxcbl9wZl9lYzJ2dGNfdHlwZShuYW1lKSA6PSB0IGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJWcGNFbmRwb2ludFR5cGVcXFwiLCBcXFwiR2F0ZXdheVxcXCIpXFxufVxcblxcbl9wZl9lYzJ2dGNfaGFzKG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12cGNlLXR5cGUtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TdWJuZXRJZHNcXFwiLFxcblxcdFxcXCJBIEdhdGV3YXkgZW5kcG9pbnQgY2Fubm90IHRha2UgU3VibmV0SWRzIChcXFxcXFxcIlN1Ym5ldCBJRHMgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBJbnRlcmZhY2UgYW5kIEdhdGV3YXlMb2FkQmFsYW5jZXIgdHlwZSBWUEMgRW5kcG9pbnRzLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBTdWJuZXRJZHMsIG9yIHNldCBWcGNFbmRwb2ludFR5cGU6IEludGVyZmFjZVxcXCIsXFxuXFx0X3BmX2VjMnZ0Y191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0X3BmX2VjMnZ0Y190eXBlKG5hbWUpID09IFxcXCJHYXRld2F5XFxcIlxcblxcdF9wZl9lYzJ2dGNfaGFzKG5hbWUsIFxcXCJTdWJuZXRJZHNcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12cGNlLXR5cGUtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZVRhYmxlSWRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBICVzIGVuZHBvaW50IGNhbm5vdCB0YWtlIFJvdXRlVGFibGVJZHM7IG9ubHkgR2F0ZXdheSBlbmRwb2ludHMgYXR0YWNoIHRvIHJvdXRlIHRhYmxlc1xcXCIsIFt0XSksXFxuXFx0XFxcIlJlbW92ZSBSb3V0ZVRhYmxlSWRzLCBvciBzZXQgVnBjRW5kcG9pbnRUeXBlOiBHYXRld2F5XFxcIixcXG5cXHRfcGZfZWMydnRjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHR0IDo9IF9wZl9lYzJ2dGNfdHlwZShuYW1lKVxcblxcdHQgIT0gXFxcIkdhdGV3YXlcXFwiXFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0X3BmX2VjMnZ0Y19oYXMobmFtZSwgXFxcIlJvdXRlVGFibGVJZHNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX2RlcmVnX2RlbGF5X291dChuKSBpZiBuID4gMzYwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctZGVyZWdpc3RyYXRpb24tZGVsYXktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDM2MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNkZXJlZ2lzdHJhdGlvbi1kZWxheVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2RlcmVnX2RlbGF5X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+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+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9ucyBtdXN0IGNhcnJ5IGEgc2VydmljZSBwcmVmaXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgYmFyZSBhY3Rpb24gbmFtZSBoYXMgbm8gc2VydmljZSB0byBhdHRhY2ggdG8uIEludHJpbnNpY3MgaW5zaWRlIHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IGFyZSBtYXJrZXIgb2JqZWN0cywgc28gaXNfc3RyaW5nIG11dGVzIHRoZW0uXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWFmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWFmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIGhhcyBubyBzZXJ2aWNlIHByZWZpeDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiQWN0aW9ucy9Db25kaXRpb25zIG11c3QgYmUgcHJlZmFjZWQgYnkgYSB2ZW5kb3IsIGUuZy4sIGlhbSwgc2RiLCBlYzIsIGV0Yy5cXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIldyaXRlIGFjdGlvbnMgYXMgc2VydmljZTpBY3Rpb24gKGUuZy4gczM6R2V0T2JqZWN0KSwgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWFmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWFmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSBhIGluIF9wZl9pYWZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJBY3Rpb25cXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxuXFx0YSAhPSBcXFwiKlxcXCJcXG5cXHRub3QgY29udGFpbnMoYSwgXFxcIjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktY29uZGl0aW9uLW9wZXJhdG9yXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbmRpdGlvbiBvcGVyYXRvcnMgY29tZSBmcm9tIGEgY2xvc2VkIGdyYW1tYXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJhc2Ugb3BlcmF0b3JzIHBsdXMgdGhlIElmRXhpc3RzIHN1ZmZpeCBhbmQgc2V0LW9wZXJhdG9yIHByZWZpeGVzLlxcbiMgQSB0eXBvIGxpa2UgU3RyaW5nRXF1YWwvU3RyaW5nRXF1YWx6IGlzIHVucmVhY2hhYmxlIGZvciBldmVyeSBvdGhlclxcbiMgbGF5ZXIgYmVjYXVzZSB0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24uXFxuX3BmX2ljb19iYXNlIDo9IHtcXG5cXHRcXFwiU3RyaW5nRXF1YWxzXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc1xcXCIsIFxcXCJTdHJpbmdFcXVhbHNJZ25vcmVDYXNlXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc0lnbm9yZUNhc2VcXFwiLFxcblxcdFxcXCJTdHJpbmdMaWtlXFxcIiwgXFxcIlN0cmluZ05vdExpa2VcXFwiLFxcblxcdFxcXCJOdW1lcmljRXF1YWxzXFxcIiwgXFxcIk51bWVyaWNOb3RFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuXFxcIiwgXFxcIk51bWVyaWNMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIk51bWVyaWNHcmVhdGVyVGhhblxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJEYXRlRXF1YWxzXFxcIiwgXFxcIkRhdGVOb3RFcXVhbHNcXFwiLCBcXFwiRGF0ZUxlc3NUaGFuXFxcIiwgXFxcIkRhdGVMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVHcmVhdGVyVGhhblxcXCIsIFxcXCJEYXRlR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJCb29sXFxcIiwgXFxcIkJpbmFyeUVxdWFsc1xcXCIsIFxcXCJJcEFkZHJlc3NcXFwiLCBcXFwiTm90SXBBZGRyZXNzXFxcIixcXG5cXHRcXFwiQXJuRXF1YWxzXFxcIiwgXFxcIkFybkxpa2VcXFwiLCBcXFwiQXJuTm90RXF1YWxzXFxcIiwgXFxcIkFybk5vdExpa2VcXFwiLCBcXFwiTnVsbFxcXCIsXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2ljb19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuIyBTdHJpcCBhbiBvcHRpb25hbCBGb3JBbGxWYWx1ZXM6L0ZvckFueVZhbHVlOiBwcmVmaXgsIHRoZW4gSWZFeGlzdHMuXFxuX3BmX2ljb191bnByZWZpeGVkKG9wKSA6PSBwYXJ0c1tjb3VudChwYXJ0cykgLSAxXSBpZiBwYXJ0cyA6PSBzcGxpdChvcCwgXFxcIjpcXFwiKVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gc3Vic3RyaW5nKGIsIDAsIGNvdW50KGIpIC0gOCkgaWYge1xcblxcdGIgOj0gX3BmX2ljb191bnByZWZpeGVkKG9wKVxcblxcdGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gYiBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0bm90IGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5Db25kaXRpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkNvbmRpdGlvbiBvcGVyYXRvciAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJVc2UgYSBkb2N1bWVudGVkIG9wZXJhdG9yIChTdHJpbmdFcXVhbHMsIEFybkxpa2UsIC4uLiksIG9wdGlvbmFsbHkgd2l0aCBJZkV4aXN0cyBvciBhIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pY29fZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pY29fc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRjb25kIDo9IG9iamVjdC5nZXQocywgXFxcIkNvbmRpdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjb25kKVxcblxcdHNvbWUgb3AsIF8gaW4gY29uZFxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3QgX3BmX2ljb19yb290KG9wKSBpbiBfcGZfaWNvX2Jhc2VcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhdGVtZW50IElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBwb2xpY3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIHVuaXF1ZW5lc3Mgd2l0aGluIG9uZSBkb2N1bWVudDsgc2VwYXJhdGUgZG9jdW1lbnRzIG1heSByZXVzZVxcbiMgaWRzIGZyZWVseS5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pZHNfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1kdXBsaWNhdGUtc2lkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuU2lkXFxcIiwgW3BhdGgsIGpdKSxcXG5cXHRzcHJpbnRmKFxcXCJTaWQgJyVzJyByZXBlYXRzIHdpdGhpbiBvbmUgcG9saWN5OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTdGF0ZW1lbnQgSURzIChTSUQpIGluIGEgc2luZ2xlIHBvbGljeSBtdXN0IGJlIHVuaXF1ZS5cXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSBzdGF0ZW1lbnQgaW4gdGhlIGRvY3VtZW50IGEgZGlzdGluY3QgU2lkIChvciBkcm9wIHRoZSBkdXBsaWNhdGVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWRzX2RvY3NcXG5cXHRzdG10cyA6PSBfcGZfaWRzX3N0bXRzKGQpXFxuXFx0c29tZSBbaSwgYV0gaW4gc3RtdHNcXG5cXHRzb21lIFtqLCBiXSBpbiBzdG10c1xcblxcdGkgPCBqXFxuXFx0aXNfb2JqZWN0KGEpXFxuXFx0aXNfb2JqZWN0KGIpXFxuXFx0c2lkIDo9IG9iamVjdC5nZXQoYSwgXFxcIlNpZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHNpZClcXG5cXHRzaWQgPT0gb2JqZWN0LmdldChiLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfb3RoZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRWZmZWN0IGlzIGNhc2Utc2Vuc2l0aXZlIEFsbG93IG9yIERlbnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIExvd2VyY2FzZSBlZmZlY3RzIGFyZSBhIGNsYXNzaWMgaGFuZC13cml0dGVuLUpTT04gdHlwbyB0aGUgc2NoZW1hXFxuIyBjYW5ub3Qgc2VlICh0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24pLlxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llY19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWVmZmVjdC1jYXNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuRWZmZWN0XFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJFZmZlY3QgJyVzJyBpcyBub3QgQWxsb3cgb3IgRGVueSAoY2FzZS1zZW5zaXRpdmUpOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJUaGUgcG9saWN5IGZhaWxlZCBsZWdhY3kgcGFyc2luZ1xcXFxcXFwiXFxcIiwgW2VmXSksXFxuXFx0XFxcIlVzZSBFZmZlY3Q6IEFsbG93IG9yIEVmZmVjdDogRGVueVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWVjX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWVjX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0ZWYgOj0gb2JqZWN0LmdldChzLCBcXFwiRWZmZWN0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoZWYpXFxuXFx0bm90IGVmIGluIHtcXFwiQWxsb3dcXFwiLCBcXFwiRGVueVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjdGlvbi9Ob3RBY3Rpb24gYW5kIFJlc291cmNlL05vdFJlc291cmNlIGFyZSBleGNsdXNpdmUgcGFpcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVhY2ggcGFpciBpcyBlaXRoZXItb3IgcGVyIHN0YXRlbWVudDsgYm90aCBhdCBvbmNlIGlzIGEgc3ludGF4IGVycm9yLlxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llZl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuX3BmX2llZl9wYWlycyA6PSB7W1xcXCJBY3Rpb25cXFwiLCBcXFwiTm90QWN0aW9uXFxcIl0sIFtcXFwiUmVzb3VyY2VcXFwiLCBcXFwiTm90UmVzb3VyY2VcXFwiXX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZXhjbHVzaXZlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLiVzXFxcIiwgW3BhdGgsIGksIHBhaXJbMV1dKSxcXG5cXHRzcHJpbnRmKFxcXCJTdGF0ZW1lbnQgc2V0cyBib3RoICVzIGFuZCAlczsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJLZWVwIG9uZSBvZiB0aGUgcGFpciBwZXIgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHBhaXIgaW4gX3BmX2llZl9wYWlyc1xcblxcdG9iamVjdC5nZXQocywgcGFpclswXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgcGFpclsxXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlc291cmNlcyBtdXN0IGJlIEFSTnMgb3IgKlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSBsaXRlcmFsIHN0cmluZ3MgYXJlIGp1ZGdlZCAtIEZuOjpHZXRBdHQgLyBGbjo6U3ViIHZhbHVlcyBzdXJmYWNlXFxuIyBhcyBtYXJrZXIgb2JqZWN0cyBpbiB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChtZWFzdXJlZCksIHNvIHRoZVxcbiMgaXNfc3RyaW5nIGd1YXJkIG11dGVzIHRoZW0uXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaXJmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXJmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXJlc291cmNlLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhbiBBUk47IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlJlc291cmNlICVzIG11c3QgYmUgaW4gQVJOIGZvcm1hdCBvciAnKicuXFxcXFxcXCJcXFwiLCBbciwgcl0pLFxcblxcdFxcXCJVc2UgYSBmdWxsIEFSTiAoYXJuOi4uLikgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXJmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXJmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSByIGluIF9wZl9pcmZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcocilcXG5cXHRyICE9IFxcXCIqXFxcIlxcblxcdG5vdCBzdGFydHN3aXRoKHIsIFxcXCJhcm46XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXN0YXRlbWVudC1yZXNvdXJjZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJZGVudGl0eSBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIFJlc291cmNlIG9yIE5vdFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHN0YXRlbWVudCBzY29wZWQgdG8gbm90aGluZyBpcyByZWplY3RlZC5cXG5fcGZfaXNycl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lzcnJfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lzcnJfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lzcnJfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktc3RhdGVtZW50LXJlc291cmNlLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWRcXFwiLCBbcGF0aCwgaV0pLFxcblxcdFxcXCJTdGF0ZW1lbnQgaGFzIG5laXRoZXIgUmVzb3VyY2Ugbm9yIE5vdFJlc291cmNlOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJQb2xpY3kgc3RhdGVtZW50IG11c3QgY29udGFpbiByZXNvdXJjZXMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgUmVzb3VyY2UgKGFuIEFSTiBvciAqKSB0byB0aGUgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pc3JyX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXNycl9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlJlc291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgXFxcIk5vdFJlc291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQb2xpY3kgVmVyc2lvbiBtdXN0IGJlIDIwMTItMTAtMTcgb3IgMjAwOC0xMC0xN1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHZlcnNpb24gc3RyaW5nIGlzIGFuIGVudW0gb2YgdHdvIGRhdGVzOyBhbnl0aGluZyBlbHNlIGlzIGEgc3ludGF4XFxuIyBlcnJvciBhdCBjcmVhdGUuXFxuX3BmX2lwdl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lwdl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuVmVyc2lvblxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5IFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2UgVmVyc2lvbjogMjAxMi0xMC0xN1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfdmVyc2lvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pcHZfZG9jc1xcblxcdHYgOj0gb2JqZWN0LmdldChkLCBcXFwiVmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHYgaW4ge1xcXCIyMDEyLTEwLTE3XFxcIiwgXFxcIjIwMDgtMTAtMTdcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS10cnVzdC1wb2xpY3ktbm8tcmVzb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVHJ1c3QgcG9saWNpZXMgY2Fubm90IGNhcnJ5IGEgUmVzb3VyY2UgZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcm9sZSBpdHNlbGYgaXMgdGhlIHJlc291cmNlIG9mIGl0cyB0cnVzdCBwb2xpY3k7IGFuIGV4cGxpY2l0XFxuIyBSZXNvdXJjZSBmaWVsZCBpcyBwcm9oaWJpdGVkLlxcbl9wZl9pdG5yX3RydXN0KG5hbWUpIDo9IGQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGQpXFxufVxcblxcbl9wZl9pdG5yX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pdG5yX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tdHJ1c3QtcG9saWN5LW5vLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pLFxcblxcdFxcXCJUcnVzdCBwb2xpY3kgc3RhdGVtZW50IGhhcyBhIFJlc291cmNlIGZpZWxkOyB0aGUgcm9sZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkhhcyBwcm9oaWJpdGVkIGZpZWxkIFJlc291cmNlXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUmVzb3VyY2UgZnJvbSB0aGUgdHJ1c3QgcG9saWN5IHN0YXRlbWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRkIDo9IF9wZl9pdG5yX3RydXN0KG5hbWUpXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2l0bnJfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tdHJ1c3QtcG9saWN5LXNlcnZpY2UtcHJpbmNpcGFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlcnZpY2UgcHJpbmNpcGFscyBsaXZlIHVuZGVyIGFtYXpvbmF3cy5jb21cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTaGFwZSBjaGVjayBvbmx5OiBldmVyeSBzZXJ2aWNlIHByaW5jaXBhbCBlbmRzIGluIC5hbWF6b25hd3MuY29tIChvclxcbiMgLmFtYXpvbmF3cy5jb20uY24gaW4gdGhlIENoaW5hIHBhcnRpdGlvbikuIFdoZXRoZXIgYSB3ZWxsLXNoYXBlZCBuYW1lXFxuIyBleGlzdHMgaXMgbGVmdCB0byB0aGUgc2VydmljZS5cXG5fcGZfaXRzcF90cnVzdChuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChkKVxcbn1cXG5cXG5fcGZfaXRzcF9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXRzcF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pdHNwX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pdHNwX3ZhbHModikgOj0gdiBpZiBpc19hcnJheSh2KVxcblxcbl9wZl9pdHNwX29rKHNwKSBpZiBlbmRzd2l0aChzcCwgXFxcIi5hbWF6b25hd3MuY29tXFxcIilcXG5cXG5fcGZfaXRzcF9vayhzcCkgaWYgZW5kc3dpdGgoc3AsIFxcXCIuYW1hem9uYXdzLmNvbS5jblxcXCIpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tdHJ1c3QtcG9saWN5LXNlcnZpY2UtcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUHJpbmNpcGFsLlNlcnZpY2VcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIlNlcnZpY2UgcHJpbmNpcGFsICclcycgaXMgbm90IGFuIGFtYXpvbmF3cy5jb20gZG9tYWluOyB0aGUgcm9sZSBjcmVhdGUgZmFpbHMgd2l0aCAnSW52YWxpZCBwcmluY2lwYWwgaW4gcG9saWN5OiBcXFxcXFxcIlNFUlZJQ0VcXFxcXFxcIjpcXFxcXFxcIiVzXFxcXFxcXCInXFxcIiwgW3NwLCBzcF0pLFxcblxcdFxcXCJVc2UgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWUsIGUuZy4gbGFtYmRhLmFtYXpvbmF3cy5jb21cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3ByaW5jaXBhbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdGQgOj0gX3BmX2l0c3BfdHJ1c3QobmFtZSlcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXRzcF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHAgOj0gb2JqZWN0LmdldChzLCBcXFwiUHJpbmNpcGFsXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHApXFxuXFx0c29tZSBzcCBpbiBfcGZfaXRzcF92YWxzKG9iamVjdC5nZXQocCwgXFxcIlNlcnZpY2VcXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKHNwKVxcblxcdG5vdCBfcGZfaXRzcF9vayhzcClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtY29kZS1zMy1wYWlyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlMzLWJhc2VkIENvZGUgbmVlZHMgYm90aCBTM0J1Y2tldCBhbmQgUzNLZXlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgSGFsZiBhbiBTMyByZWZlcmVuY2UgY2Fubm90IGJlIGZldGNoZWQuIE9ubHkganVkZ2VkIHdoZW4gbmVpdGhlciBaaXBGaWxlXFxuIyBub3IgSW1hZ2VVcmkgaXMgcHJlc2VudCAodGhvc2Ugc2hhcGVzIGJlbG9uZyB0byB0aGUgZXhjbHVzaXZlIHJ1bGUpLlxcbl9wZl9sY3NwX2NvZGUobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29kZVxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG5fcGZfbGNzcF9oYXMoYywgaykgaWYgb2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2xjc3BfaGFsZihjKSA6PSBbXFxcIlMzS2V5XFxcIiwgXFxcIlMzQnVja2V0XFxcIl0gaWYge1xcblxcdF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNCdWNrZXRcXFwiKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIlMzS2V5XFxcIilcXG59XFxuXFxuX3BmX2xjc3BfaGFsZihjKSA6PSBbXFxcIlMzQnVja2V0XFxcIiwgXFxcIlMzS2V5XFxcIl0gaWYge1xcblxcdF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNLZXlcXFwiKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIlMzQnVja2V0XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtY29kZS1zMy1wYWlyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvZGUuJXNcXFwiLCBbbWlzc2luZ1swXV0pLFxcblxcdHNwcmludGYoXFxcIkNvZGUgaGFzICVzIGJ1dCBubyAlczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUzMgQnVja2V0IGFuZCBLZXkgYXJlIHJlcXVpcmVkIGZvciB1cGxvYWRpbmcgd2l0aCBTMyBwYXJhbWV0ZXJzLlxcXFxcXFwiXFxcIiwgW21pc3NpbmdbMV0sIG1pc3NpbmdbMF1dKSxcXG5cXHRcXFwiU2V0IGJvdGggUzNCdWNrZXQgYW5kIFMzS2V5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRjIDo9IF9wZl9sY3NwX2NvZGUobmFtZSlcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJaaXBGaWxlXFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJJbWFnZVVyaVxcXCIpXFxuXFx0bWlzc2luZyA6PSBfcGZfbGNzcF9oYWxmKGMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWNvZGUtemlwZmlsZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5saW5lIFppcEZpbGUgZXhjbHVkZXMgZXZlcnkgb3RoZXIgQ29kZSBwYXJhbWV0ZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgS2V5IHByZXNlbmNlIGluIHRoZSBDb2RlIG9iamVjdCBpcyB0aGUgdmlvbGF0aW9uOyBjaGVja2VkIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sY3p4X290aGVyIDo9IHtcXFwiUzNCdWNrZXRcXFwiLCBcXFwiUzNLZXlcXFwiLCBcXFwiUzNPYmplY3RWZXJzaW9uXFxcIiwgXFxcIkltYWdlVXJpXFxcIn1cXG5cXG5fcGZfbGN6eF9jb2RlKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvZGVcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtY29kZS16aXBmaWxlLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db2RlLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb2RlIHNldHMgWmlwRmlsZSB0b2dldGhlciB3aXRoICVzOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQbGVhc2UgZG8gbm90IHByb3ZpZGUgb3RoZXIgRnVuY3Rpb25Db2RlIHBhcmFtZXRlcnMgd2hlbiBwcm92aWRpbmcgYSBaaXBGaWxlLlxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaW5saW5lIFppcEZpbGUgYWxvbmUsIG9yIHN3aXRjaCBlbnRpcmVseSB0byB0aGUgUzMvaW1hZ2UgcmVmZXJlbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRjIDo9IF9wZl9sY3p4X2NvZGUobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJaaXBGaWxlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHNvbWUgayBpbiBfcGZfbGN6eF9vdGhlclxcblxcdG9iamVjdC5nZXQoYywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1kbHEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkIGxldHRlciB0YXJnZXQgbXVzdCBzaXQgaW4gdGhlIGRlcGxveSByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVnaW9uIGNvbXBhcmlzb24gbmVlZHMgdGhlIGRlcGxveSByZWdpb24sIHdoaWNoIG9ubHkgdGhpcyBwYWNrIHNlZXNcXG4jIChkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIGluIGVuZm9yY2UgbW9kZTsgdGhlIHJ1bGVcXG4jIHNraXBzIHdpdGhvdXQgaXQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWRscS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZWFkIGxldHRlciB0YXJnZXQgcmVnaW9uICclcycgaXMgbm90IHRoZSBkZXBsb3kgcmVnaW9uICclcyc7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgZGVhZCBsZXR0ZXIgcXVldWUgQVJOOiBUaGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5IHRoZSBUYXJnZXRBcm4gbXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIExhbWJkYSBmdW5jdGlvbiBpdCdzIGFzc29jaWF0ZWQgd2l0aC5cXFxcXFxcIlxcXCIsIFtwYXJ0c1szXSwgcmVnaW9uXSksXFxuXFx0XFxcIlBvaW50IERlYWRMZXR0ZXJDb25maWcgYXQgYSBxdWV1ZSBvciB0b3BpYyBpbiB0aGUgc2FtZSByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1kZWFkbGV0dGVyY29uZmlnLmh0bWxcXFwiKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1szXSAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZGxxLXNlcnZpY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGRlYWQgbGV0dGVyIHRhcmdldCBtdXN0IGJlIGFuIFNRUyBxdWV1ZSBvciBTTlMgdG9waWNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2Ugc2VnbWVudCBsaXZlcyBpbnNpZGUgdGhlIEFSTiBzdHJpbmcsIGludmlzaWJsZSB0byBhbnlcXG4jIHNjaGVtYSBsYXllci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1kbHEtc2VydmljZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVhZExldHRlckNvbmZpZy5UYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIkRlYWQgbGV0dGVyIHRhcmdldCBzZXJ2aWNlICclcycgaXMgbm90IHNxcyBvciBzbnM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgZGVhZCBsZXR0ZXIgcXVldWUgQVJOOiBUaGUgc2VydmljZSBzcGVjaWZpZWQgYnkgdGhlIFRhcmdldEFybiBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZWFkIGxldHRlciBjb25maWd1cmF0aW9uLlxcXFxcXFwiXFxcIiwgW3BhcnRzWzJdXSksXFxuXFx0XFxcIlBvaW50IERlYWRMZXR0ZXJDb25maWcgYXQgYW4gU1FTIHF1ZXVlIG9yIFNOUyB0b3BpYyBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1kZWFkbGV0dGVyY29uZmlnLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRub3QgcGFydHNbMl0gaW4ge1xcXCJzcXNcXFwiLCBcXFwic25zXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZWZzLXJlcXVpcmVzLXZwY1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNb3VudGluZyBFRlMgcmVxdWlyZXMgVnBjQ29uZmlnXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1vdW50aW5nIEVGUyByZXF1aXJlcyB0aGUgZnVuY3Rpb24gdG8gcnVuIGluc2lkZSBhIFZQQy4gS2V5IHByZXNlbmNlIGlzXFxuIyBjaGVja2VkIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xlZnN2X3Byb3BzKG5hbWUpIDo9IHByb3BzIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZWZzLXJlcXVpcmVzLXZwY1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVnBjQ29uZmlnXFxcIixcXG5cXHRcXFwiRmlsZVN5c3RlbUNvbmZpZ3Mgd2l0aG91dCBWcGNDb25maWc7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkZ1bmN0aW9uIG11c3QgYmUgY29uZmlndXJlZCB0byBleGVjdXRlIGluIGEgVlBDIHRvIHJlZmVyZW5jZSBhY2Nlc3MgcG9pbnQgLi4uIFBsZWFzZSB1cGRhdGUgdGhlIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFZwY0NvbmZpZyB3aXRoIHN1Ym5ldHMgdGhhdCBoYXZlIEVGUyBtb3VudCB0YXJnZXRzIGluIHRoZWlyIEFac1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRwcm9wcyA6PSBfcGZfbGVmc3ZfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlsZVN5c3RlbUNvbmZpZ3NcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0NvbmZpZ1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZW52LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbGltaXRlZCB0byA0MDk2IGJ5dGVzIGluIHRvdGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODquODhuODqeODq+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+IDM1XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZHVyYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGJhY2t1cCB3aW5kb3cgbXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgXFxcIkhIOk1NXFxcIiAtPiBtaW51dGVzIG9mIGRheTsgdW5kZWZpbmVkIGZvciBhbnl0aGluZyBlbHNlLiBEaWdpdHMgZ29cXG4jIHRocm91Z2ggYSBsb29rdXAgdGFibGUgYmVjYXVzZSB0b19udW1iZXIgcmVqZWN0cyBsZWFkaW5nIHplcm9zXFxuIyAodG9fbnVtYmVyKFxcXCIwM1xcXCIpIGlzIHVuZGVmaW5lZCBpbiB0aGUgZW5naW5lJ3MgUmVnbyBidWlsZCkuXFxuX3BmX3Jkc3dkX2RpZ2l0IDo9IHtcXFwiMFxcXCI6IDAsIFxcXCIxXFxcIjogMSwgXFxcIjJcXFwiOiAyLCBcXFwiM1xcXCI6IDMsIFxcXCI0XFxcIjogNCwgXFxcIjVcXFwiOiA1LCBcXFwiNlxcXCI6IDYsIFxcXCI3XFxcIjogNywgXFxcIjhcXFwiOiA4LCBcXFwiOVxcXCI6IDl9XFxuXFxuX3BmX3Jkc3dkX21pbih0KSA6PSBtIGlmIHtcXG5cXHRpc19zdHJpbmcodClcXG5cXHRyZWdleC5tYXRjaChgXihbMDFdWzAtOV18MlswLTNdKTpbMC01XVswLTldJGAsIHQpXFxuXFx0aCA6PSAoX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAwLCAxKV0gKiAxMCkgKyBfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDEsIDEpXVxcblxcdG1pIDo9IChfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDMsIDEpXSAqIDEwKSArIF9wZl9yZHN3ZF9kaWdpdFtzdWJzdHJpbmcodCwgNCwgMSldXFxuXFx0bSA6PSAoaCAqIDYwKSArIG1pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZHVyYXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiUHJlZmVycmVkQmFja3VwV2luZG93ICclcycgaXMgb25seSAldiBtaW51dGVzOyBSRFMgcmVxdWlyZXMgYXQgbGVhc3QgMzAgKFxcXFxcXFwiQmFja3VwIHdpbmRvdyBtdXN0IGJlIGF0IGxlYXN0IDMwIG1pbnV0ZXMuXFxcXFxcXCIpXFxcIiwgW3csIGRdKSxcXG5cXHRcXFwiV2lkZW4gdGhlIHdpbmRvdyB0byAzMCBtaW51dGVzIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcodylcXG5cXHRwYXJ0cyA6PSBzcGxpdCh3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG5cXHRzIDo9IF9wZl9yZHN3ZF9taW4ocGFydHNbMF0pXFxuXFx0ZSA6PSBfcGZfcmRzd2RfbWluKHBhcnRzWzFdKVxcblxcdGQgOj0gKChlIC0gcykgKyAxNDQwKSAlIDE0NDBcXG5cXHRkIDwgMzBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtYmFja3VwLXdpbmRvdy1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUHJlZmVycmVkQmFja3VwV2luZG93IG11c3QgYmUgaGgyNDptaS1oaDI0Om1pXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyAnJXMnIGlzIG5vdCBoaDI0Om1pLWhoMjQ6bWkgKDI0SCBjbG9jayBVVEMpOyBSRFMgcmVqZWN0cyBpdCBhdCBjcmVhdGUgdGltZVxcXCIsIFt3XSksXFxuXFx0XFxcIlVzZSB0aGUgaGgyNDptaS1oaDI0Om1pIGZvcm0sIGUuZy4gMDM6MDAtMDQ6MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcodylcXG5cXHRub3QgcmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XS0oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB3KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1kYm5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIERCTmFtZSBtdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBsZXR0ZXItc3RhcnQgaGFsZiBvZiB0aGUgc2VydmljZSBtZXNzYWdlIGlzIGNsYWltZWQ6IHRoZVxcbiMgXFxcIm9ubHkgYWxwaGFudW1lcmljXFxcIiBoYWxmIGlzIG1lYXN1cmFibHkgd3JvbmcgKGJlbmNoX2RiIGRlcGxveXMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWRibmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRCTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiREJOYW1lICclcycgZG9lcyBub3QgYmVnaW4gd2l0aCBhIGxldHRlciAoXFxcXFxcXCJEQk5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyXFxcXFxcXCIpOyB0aGUgQ3JlYXRlREJJbnN0YW5jZSBjYWxsIGZhaWxzXFxcIiwgW2RuXSksXFxuXFx0XFxcIlN0YXJ0IHRoZSBkYXRhYmFzZSBuYW1lIHdpdGggYSBsZXR0ZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuZ2luZVxcXCIpID09IFxcXCJwb3N0Z3Jlc1xcXCJcXG5cXHRkbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRCTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdYCwgZG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImdwMyBiZWxvdyA0MDAgR2lCIGNhbm5vdCB0YWtlIGN1c3RvbSBJb3BzIG9yIFN0b3JhZ2VUaHJvdWdocHV0IChwb3N0Z3Jlcy9teXNxbClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc2dwM19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9yZHNncDNfY3VzdG9tKG5hbWUpIGlmIF9wZl9yZHNncDNfaGFzKG5hbWUsIFxcXCJJb3BzXFxcIilcXG5cXG5fcGZfcmRzZ3AzX2N1c3RvbShuYW1lKSBpZiBfcGZfcmRzZ3AzX2hhcyhuYW1lLCBcXFwiU3RvcmFnZVRocm91Z2hwdXRcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJncDMgd2l0aCAldiBHaUIgY2Fubm90IHRha2UgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQgYmVsb3cgNDAwIEdpQiBmb3IgZW5naW5lICVzIChcXFxcXFxcIllvdSBjYW4ndCBzcGVjaWZ5IElPUFMgb3Igc3RvcmFnZSB0aHJvdWdocHV0IC4uLiBsZXNzIHRoYW4gNDAwLlxcXFxcXFwiKVxcXCIsIFtzLCBlbmddKSxcXG5cXHRcXFwiRHJvcCB0aGUgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQsIG9yIGFsbG9jYXRlIGF0IGxlYXN0IDQwMCBHaUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRlbmcgaW4ge1xcXCJwb3N0Z3Jlc1xcXCIsIFxcXCJteXNxbFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA8IDQwMFxcblxcdF9wZl9yZHNncDNfY3VzdG9tKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIGlvMSBJb3BzIG1heSBub3QgZXhjZWVkIDUwIHBlciBHaUIgb2Ygc3RvcmFnZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIGJlbmNoZWQgZW5naW5lL3R5cGUgcGFpcjsgdGhlIGhpc3RvcmljYWwgNjQwMDAgSU9QUyBjYXAgaXNcXG4jIGdvbmUgKDgwMDAwIGRlcGxveWVkIGNsZWFuIGF0IHJhdGlvIDQwIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGlzICV2IHBlciBHaUIgZm9yICV2IEdpQjsgcG9zdGdyZXMgaW8xIGFsbG93cyBhdCBtb3N0IDUwIChcXFxcXFxcIkludmFsaWQgaW9wcyB0byBzdG9yYWdlIChHaUIpIHJhdGlvXFxcXFxcXCIpXFxcIiwgW24sIG4gLyBzLCBzXSksXFxuXFx0XFxcIktlZXAgSW9wcyBhdCBvciBiZWxvdyA1MCB4IEFsbG9jYXRlZFN0b3JhZ2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJpbzFcXFwiXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA+IDBcXG5cXHRuID4gcyAqIDUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiaW8xIGFuZCBpbzIgc3RvcmFnZSByZXF1aXJlIHRoZSBJb3BzIHByb3BlcnR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0b3JhZ2VUeXBlICVzIHJlcXVpcmVzIElvcHMgKFxcXFxcXFwiVGhlIHN0b3JhZ2UgdHlwZSAlcyByZXF1aXJlcyBpb3BzIHRvIGJlIHNwZWNpZmllZC5cXFxcXFxcIilcXFwiLCBbc3QsIHN0XSksXFxuXFx0XFxcIlNldCBJb3BzIGFsb25nc2lkZSB0aGUgcHJvdmlzaW9uZWQtSU9QUyBzdG9yYWdlIHR5cGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRzdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIilcXG5cXHRzdCBpbiB7XFxcImlvMVxcXCIsIFxcXCJpbzJcXFwifVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJb3BzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wYXNzd29yZC12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYXN0ZXJVc2VyUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgd2l0aG91dCAnLycsICdAJywgJ1xcXFxcXFwiJyBvciBzcGFjZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzcHdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCJcXG5cXG5fcGZfcmRzcHdfdHlwZXMgOj0ge1xcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIsIFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIn1cXG5cXG5fcGZfcmRzcHdfZm9yYmlkZGVuIDo9IHtcXFwiL1xcXCIsIFxcXCJAXFxcIiwgXFxcIlxcXFxcXFwiXFxcIiwgXFxcIiBcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdFxcXCJNYXN0ZXJVc2VyUGFzc3dvcmQgaXMgc2hvcnRlciB0aGFuIDggY2hhcmFjdGVyczsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLFxcblxcdFxcXCJVc2UgOCsgY2hhcmFjdGVycywgb3IgYSBTZWNyZXRzIE1hbmFnZXIgcmVmZXJlbmNlXFxcIixcXG5cXHRfcGZfcmRzcHdfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiBfcGZfcmRzcHdfdHlwZXNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0cHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiKVxcblxcdGlzX3N0cmluZyhwdylcXG5cXHRjb3VudChwdykgPCA4XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1hc3RlclVzZXJQYXNzd29yZCBjb250YWlucyAnJXMnOyBSRFMgZm9yYmlkcyAnLycsICdAJywgZG91YmxlIHF1b3RlcyBhbmQgc3BhY2VzXFxcIiwgW2NoXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgZm9yYmlkZGVuIGNoYXJhY3Rlciwgb3IgdXNlIGEgU2VjcmV0cyBNYW5hZ2VyIHJlZmVyZW5jZVxcXCIsXFxuXFx0X3BmX3Jkc3B3X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4gX3BmX3Jkc3B3X3R5cGVzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHB3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFzdGVyVXNlclBhc3N3b3JkXFxcIilcXG5cXHRpc19zdHJpbmcocHcpXFxuXFx0c29tZSBjaCBpbiBfcGZfcmRzcHdfZm9yYmlkZGVuXFxuXFx0Y29udGFpbnMocHcsIGNoKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkYXRhYmFzZSBwb3J0IG11c3QgYmUgd2l0aGluIDExNTAtNjU1MzVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPCAxMTUwXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPiA2NTUzNVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvcnQgJXYgaXMgb3V0c2lkZSAxMTUwLTY1NTM1IChcXFxcXFxcIkludmFsaWQgZW5kcG9pbnQgcG9ydCAldi4gVmFsaWQgcmFuZ2UgaXM6IDExNTAtNjU1MzVcXFxcXFxcIilcXFwiLCBbbiwgbl0pLFxcblxcdFxcXCJQaWNrIGEgcG9ydCBiZXR3ZWVuIDExNTAgYW5kIDY1NTM1XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb3J0XFxcIikpXFxuXFx0X3BmX3Jkc3BvcnRfb3V0KG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VydmVybGVzcyB2MiBNaW5DYXBhY2l0eSBtdXN0IG5vdCBleGNlZWQgTWF4Q2FwYWNpdHksIGFuZCBNYXhDYXBhY2l0eSBpcyBhdCBtb3N0IDI1NlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNzdjJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MtdjIuc2V0dGluZy1jYXBhY2l0eS5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5DYXBhY2l0eSAldiBleGNlZWRzIE1heENhcGFjaXR5ICV2IChcXFxcXFxcIm1pbmltdW0gY2FwYWNpdHkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4aW11bSBjYXBhY2l0eVxcXFxcXFwiKVxcXCIsIFttbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5DYXBhY2l0eSA8PSBNYXhDYXBhY2l0eVxcXCIsXFxuXFx0X3BmX3Jkc3N2Ml91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWF4Q2FwYWNpdHlcXFwiKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1heENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNYXhDYXBhY2l0eSAldiBpcyBhYm92ZSAyNTYgQUNVcyAoXFxcXFxcXCJUaGUgdmFsaWQgc2NhbGluZyByYW5nZSBmb3IgdGhpcyBjbHVzdGVyIGlzIDAuMCB0byAyNTYuMC5cXFxcXFxcIilcXFwiLCBbbXhdKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU2IEFDVXNcXFwiLFxcblxcdF9wZl9yZHNzdjJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbi5NYXhDYXBhY2l0eVxcXCIpKVxcblxcdG14ID4gMjU2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXdpbmRvdy1vdmVybGFwXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IGFuZCB0aGUgbWFpbnRlbmFuY2Ugd2luZG93IG11c3Qgbm90IG92ZXJsYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBcXFwiSEg6TU1cXFwiIC0+IG1pbnV0ZXMgb2YgZGF5OyB1bmRlZmluZWQgZm9yIGFueXRoaW5nIGVsc2UuIERpZ2l0cyBnb1xcbiMgdGhyb3VnaCBhIGxvb2t1cCB0YWJsZSBiZWNhdXNlIHRvX251bWJlciByZWplY3RzIGxlYWRpbmcgemVyb3NcXG4jICh0b19udW1iZXIoXFxcIjAzXFxcIikgaXMgdW5kZWZpbmVkIGluIHRoZSBlbmdpbmUncyBSZWdvIGJ1aWxkKS5cXG5fcGZfcmRzd29fZGlnaXQgOj0ge1xcXCIwXFxcIjogMCwgXFxcIjFcXFwiOiAxLCBcXFwiMlxcXCI6IDIsIFxcXCIzXFxcIjogMywgXFxcIjRcXFwiOiA0LCBcXFwiNVxcXCI6IDUsIFxcXCI2XFxcIjogNiwgXFxcIjdcXFwiOiA3LCBcXFwiOFxcXCI6IDgsIFxcXCI5XFxcIjogOX1cXG5cXG5fcGZfcmRzd29fbWluKHQpIDo9IG0gaWYge1xcblxcdGlzX3N0cmluZyh0KVxcblxcdHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdClcXG5cXHRoIDo9IChfcGZfcmRzd29fZGlnaXRbc3Vic3RyaW5nKHQsIDAsIDEpXSAqIDEwKSArIF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMSwgMSldXFxuXFx0bWkgOj0gKF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMywgMSldICogMTApICsgX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCA0LCAxKV1cXG5cXHRtIDo9IChoICogNjApICsgbWlcXG59XFxuXFxuIyBUaGUgYmFja3VwIHdpbmRvdyByZWN1cnMgZGFpbHksIHNvIGEgc2FtZS1kYXkgbWFpbnRlbmFuY2Ugd2luZG93XFxuIyBvdmVybGFwcyB3aGVuZXZlciB0aGUgdGltZS1vZi1kYXkgaW50ZXJ2YWxzIGludGVyc2VjdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy13aW5kb3ctb3ZlcmxhcFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXAgd2luZG93ICVzIG92ZXJsYXBzIG1haW50ZW5hbmNlIHdpbmRvdyAlczsgUkRTIHJlamVjdHMgdGhlIHBhaXIgKFxcXFxcXFwiVGhlIGJhY2t1cCB3aW5kb3cgYW5kIG1haW50ZW5hbmNlIHdpbmRvdyBtdXN0IG5vdCBvdmVybGFwLlxcXFxcXFwiKVxcXCIsIFtidywgbXddKSxcXG5cXHRcXFwiU2VwYXJhdGUgdGhlIHR3byB3aW5kb3dzIGluIHRpbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRidyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKGJ3KVxcblxcdGJwIDo9IHNwbGl0KGJ3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQoYnApID09IDJcXG5cXHRicyA6PSBfcGZfcmRzd29fbWluKGJwWzBdKVxcblxcdGJlIDo9IF9wZl9yZHN3b19taW4oYnBbMV0pXFxuXFx0YnMgPCBiZVxcblxcdG13IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dcXFwiKVxcblxcdGlzX3N0cmluZyhtdylcXG5cXHRtcCA6PSBzcGxpdChsb3dlcihtdyksIFxcXCItXFxcIilcXG5cXHRjb3VudChtcCkgPT0gMlxcblxcdG0xIDo9IHNwbGl0KG1wWzBdLCBcXFwiOlxcXCIpXFxuXFx0bTIgOj0gc3BsaXQobXBbMV0sIFxcXCI6XFxcIilcXG5cXHRjb3VudChtMSkgPT0gM1xcblxcdGNvdW50KG0yKSA9PSAzXFxuXFx0bTFbMF0gPT0gbTJbMF1cXG5cXHRtcyA6PSBfcGZfcmRzd29fbWluKHNwcmludGYoXFxcIiVzOiVzXFxcIiwgW20xWzFdLCBtMVsyXV0pKVxcblxcdG1lIDo9IF9wZl9yZHN3b19taW4oc3ByaW50ZihcXFwiJXM6JXNcXFwiLCBbbTJbMV0sIG0yWzJdXSkpXFxuXFx0bXMgPCBtZVxcblxcdGJzIDwgbWVcXG5cXHRtcyA8IGJlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ2xvdWRGcm9udCBhbGlhcyB0YXJnZXQgbXVzdCB1c2UgaG9zdGVkIHpvbmUgWjJGRFROREFUQVFZVzJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBpcyBhbGlhc2VkIHRocm91Z2ggdGhlIHNpbmdsZSBnbG9iYWwgaG9zdGVkXFxuIyB6b25lIFoyRkRUTkRBVEFRWVcyLiBBbnkgb3RoZXIgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIChhbiBBTEIncyByZWdpb25hbFxcbiMgem9uZSBpZCBpcyB0aGUgY2xhc3NpYyBwYXN0ZSBlcnJvcikgZmFpbHMgYXQgZGVwbG95IHRpbWUgd2l0aCBcXFwidGhlIGFsaWFzXFxuIyB0YXJnZXQgbmFtZSBkb2VzIG5vdCBsaWUgd2l0aGluIHRoZSB0YXJnZXQgem9uZVxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgYWxpYXMgdGFyZ2V0cyBhIENsb3VkRnJvbnQgZG9tYWluLCBzbyBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgbXVzdCBiZSBaMkZEVE5EQVRBUVlXMiwgbm90ICclcydcXFwiLCBbemlkXSksXFxuXFx0XFxcIlNldCBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgdG8gWjJGRFROREFUQVFZVzIgKGluIHRoZSBDREssIHJvdXRlNTNfdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0IGRvZXMgdGhpcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvY2ZfcmVnaW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0ZG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuRE5TTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRucylcXG5cXHRlbmRzd2l0aCh0cmltX3N1ZmZpeChsb3dlcihkbnMpLCBcXFwiLlxcXCIpLCBcXFwiLmNsb3VkZnJvbnQubmV0XFxcIilcXG5cXHR6aWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6aWQpXFxuXFx0emlkICE9IFxcXCJaMkZEVE5EQVRBUVlXMlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19hcGV4X25vcm0obikgOj0gdHJpbV9zdWZmaXgobG93ZXIobiksIFxcXCIuXFxcIilcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAyMyBjYXRjaGVzIGFuIGFwZXggQ05BTUUgb25seSB3aGVuIHRoZSByZWNvcmQgY2FycmllcyBhXFxuIyBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lLiBDREsgTDIgYWx3YXlzIGxpbmtzIHJlY29yZHMgd2l0aFxcbiMgSG9zdGVkWm9uZUlkOiB7XFxcIlJlZlxcXCI6IDx6b25lPn0sIHdoaWNoIEUzMDIzIGRvZXMgbm90IHNlZSAobWVhc3VyZWQgMjAyNi0wOS0wMixcXG4jIGVuZ2luZSAxLjcuMC1iZXRhKS4gcmVzb2x2ZSgpIHR1cm5zIHN1Y2ggYSBSZWYgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCxcXG4jIHNvIHdoZW4gdGhhdCBJRCBuYW1lcyBhIEhvc3RlZFpvbmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUgd2UgY2FuIHJlYWQgaXRzXFxuIyBsaXRlcmFsIE5hbWUgYW5kIGRvIHRoZSBhcGV4IGNvbXBhcmlzb24gb3Vyc2VsdmVzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hcGV4LWNuYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXggKCclcycpOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiUlJTZXQgb2YgdHlwZSBDTkFNRSAuLi4gaXMgbm90IHBlcm1pdHRlZCBhdCBhcGV4XFxcXFxcXCJcXFwiLCBbcmVjTmFtZV0pLFxcblxcdFxcXCJVc2UgYW4gYWxpYXMgQS9BQUFBIHJlY29yZCBmb3IgdGhlIGFwZXggKEFsaWFzVGFyZ2V0KSwgb3IgbW92ZSB0aGUgQ05BTUUgdG8gYSBzdWJkb21haW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVzb3VyY2UtcmVjb3JkLXNldHMtY2hvb3NpbmctYWxpYXMtbm9uLWFsaWFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHpyZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6cmVmKVxcblxcdHpyZWYgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVxcXCIpXFxuXFx0em9uZU5hbWUgOj0gcmVzb2x2ZSh6cmVmLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem9uZU5hbWUpXFxuXFx0cmVjTmFtZSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhyZWNOYW1lKVxcblxcdF9wZl9yNTNfYXBleF9ub3JtKHJlY05hbWUpID09IF9wZl9yNTNfYXBleF9ub3JtKHpvbmVOYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgZXhwcmVzc2VzIHRoaXMgYXMgYSBvbmVPZiwgd2hpY2ggdGhlIHNlcnZlci1zaWRlXFxuIyBwcmUtZGVwbG95IHZhbGlkYXRpb24gZW5mb3JjZXMgKFxcXCIyIHN1YnNjaGVtYXMgbWF0Y2hlZCBpbnN0ZWFkIG9mIG9uZVxcXCIpIGJ1dFxcbiMgdGhlIGJ1bmRsZWQgZW5naW5lIGRvZXMgbm90IGV2YWx1YXRlIOKAlCBoZW5jZSB1cHN0cmVhbTogcGVuZGluZy1lbmdpbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiLFxcblxcdFxcXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlOyBDbG91ZEZvcm1hdGlvbiByZWplY3RzIHRoZSByZWNvcmQgc2V0IGJlZm9yZSBwcm92aXNpb25pbmdcXFwiLFxcblxcdFxcXCJLZWVwIGVpdGhlciB0aGUgQ29udGluZW50Q29kZSBvciB0aGUgQ291bnRyeUNvZGUgKGFkZCBTdWJkaXZpc2lvbkNvZGUgb25seSBuZXh0IHRvIENvdW50cnlDb2RlIFVTKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtcm91dGU1My1yZWNvcmRzZXQtZ2VvbG9jYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRnZW8gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KGdlbylcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb250aW5lbnRDb2RlXFxcIiwgbnVsbCkpXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ291bnRyeUNvZGVcXFwiLCBudWxsKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdFxcXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJNdWx0aXZhbHVlIGFuc3dlciBycnNldCBzaG91bGQgbm90IGJlIGFuIGFsaWFzIHJyc2V0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgcGxhaW4gbXVsdGl2YWx1ZSByZWNvcmRzIHdpdGggUmVzb3VyY2VSZWNvcmRzLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXIgYW5kIGtlZXAgdGhlIGFsaWFzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOUyByZWNvcmRzIHRha2Ugbm8gcm91dGluZyBwb2xpY3k7IENOQU1FIGNhbm5vdCBiZSBtdWx0aXZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdHlwb2xfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfdHlwb2xfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3R5cG9sX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuIyBPbmx5IGNvbWJpbmF0aW9ucyB0aGF0IGZhaWxlZCBvbiBhIHJlYWwgZGVwbG95IGFyZSBmbGFnZ2VkLiBTT0EvRFMgd2l0aCBhXFxuIyByb3V0aW5nIHBvbGljeSBhcmUgYWxzbyBkb2N1bWVudGVkIGFzIHVuc3VwcG9ydGVkIGJ1dCB3ZXJlIG5vdCBtZWFzdXJlZCwgc29cXG4jIHRoZXkgYXJlIGRlbGliZXJhdGVseSBsZWZ0IG91dCAoc2VlIHRoZSBkaXNjb3ZlcnkgaXNzdWUpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkFuIE5TIHJlY29yZCBjYW5ub3QgdXNlIGEgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgYSBzaW1wbGUgcmVjb3JkIHNldCBmb3IgTlMgcmVjb3JkcyAobm8gV2VpZ2h0L1JlZ2lvbi9GYWlsb3Zlci9HZW9Mb2NhdGlvbi9NdWx0aVZhbHVlQW5zd2VyL0NpZHJSb3V0aW5nQ29uZmlnKVxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTlNcXFwiXFxuXFx0X3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkEgQ05BTUUgcmVjb3JkIGNhbm5vdCB1c2UgdGhlIG11bHRpdmFsdWUgYW5zd2VyIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUG9pbnQgdGhlIG11bHRpdmFsdWUgcmVjb3JkcyBhdCBBL0FBQUEgKG9yIGFub3RoZXIgc3VwcG9ydGVkIHR5cGUpLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBuZWVkcyBBbGlhc1RhcmdldCBvciB0aGUgZnVsbCBUVEwrUmVzb3VyY2VSZWNvcmRzIHBhaXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M192YWxzcmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbiMgVGhlIHNlcnZpY2UgZXhwZWN0cyBcXFwiZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kXFxuIyBSZXNvdXJjZVJlY29yZHNdXVxcXCIgKFRyYWZmaWNQb2xpY3lJbnN0YW5jZUlkIGhhcyBubyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSkuXFxuIyBUaGUgVFRMK0FsaWFzVGFyZ2V0IGNvbWJpbmF0aW9uIGlzIGFscmVhZHkgdGhlIGVuZ2luZSdzIEUzMDI5LCBzbyB0aGlzIHJ1bGVcXG4jIGNvdmVycyB0aGUgcmVtYWluaW5nIHNoYXBlczogYWxpYXMgcGx1cyByZWNvcmRzLCBhbmQgYW4gaW5jb21wbGV0ZSBub24tYWxpYXNcXG4jIGdyb3VwIChyZWNvcmRzIHdpdGhvdXQgVFRMLCBUVEwgd2l0aG91dCByZWNvcmRzLCBvciBuZWl0aGVyKS5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSkgaWYge1xcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIilcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpICE9IG51bGxcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiQWxpYXNUYXJnZXQgYW5kIFJlc291cmNlUmVjb3JkcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIEFsaWFzVGFyZ2V0IG9yIFRUTC1wbHVzLVJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIktlZXAgdGhlIEFsaWFzVGFyZ2V0IGFuZCBkcm9wIFJlc291cmNlUmVjb3Jkcywgb3IgbWFrZSBpdCBhIHBsYWluIHJlY29yZCB3aXRoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRcXFwiQSBub24tYWxpYXMgcmVjb3JkIHNldCBuZWVkcyBib3RoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzOyB0aGUgc2VydmljZSByZWplY3RzIGFuIGluY29tcGxldGUgcGFpciB3aXRoIFxcXFxcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kIFJlc291cmNlUmVjb3Jkc11dIC4uLiBmb3VuZCBub25lXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTcGVjaWZ5IFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzIHRvZ2V0aGVyLCBvciB1c2UgQWxpYXNUYXJnZXQgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKSBpZiB7XFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIGVuZm9yY2VzIFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLFxcbiMgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIEdlb1Byb3hpbWl0eUxvY2F0aW9uLCBvciBDaWRyUm91dGluZ0NvbmZpZ11cXFwiLlxcbiMgR2VvUHJveGltaXR5TG9jYXRpb24gaXMgbm90IGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHksIHNvIGZpdmUgcmVtYWluIGhlcmUuXFxuIyBNdWx0aVZhbHVlQW5zd2VyOiBmYWxzZSBpcyB0cmVhdGVkIGFzIGFic2VudCDigJQgb25seSB0cnVlIHNlbGVjdHMgdGhlIHBvbGljeS5cXG5fcGZfcjUzX3BvbHhfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwcm9wKSBpZiB7XFxuXFx0cHJvcCAhPSBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIikgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpIDo9IHBzIGlmIHtcXG5cXHRwcyA6PSBbcCB8IHNvbWUgcCBpbiBhcnJheS5jb25jYXQoX3BmX3I1M19wb2x4X3Byb3BzLCBbXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXSk7IF9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHApXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3ksIGJ1dCAldiBhcmUgYWxsIHNwZWNpZmllZFxcXCIsIFtwc10pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBzcGxpdCB0aGUgcmVzdCBpbnRvIHNlcGFyYXRlIHJlY29yZCBzZXRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRwcyA6PSBfcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSlcXG5cXHRjb3VudChwcykgPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXRJZGVudGlmaWVyIGFuZCBhIHJvdXRpbmcgcG9saWN5IG11c3QgYXBwZWFyIHRvZ2V0aGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfc2lkcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M19zaWRwX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3NpZHBfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiQSByb3V0aW5nIHBvbGljeSBpcyBjb25maWd1cmVkIGJ1dCBTZXRJZGVudGlmaWVyIGlzIG1pc3Npbmc7IHRoZSBDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiTWlzc2luZyBmaWVsZCAnU2V0SWRlbnRpZmllcidcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFNldElkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYW1vbmcgdGhlIHJlY29yZCBzZXRzIHNoYXJpbmcgdGhpcyBOYW1lIGFuZCBUeXBlXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG5cXHRub3QgaXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIlNldElkZW50aWZpZXIgaXMgc3BlY2lmaWVkIGJ1dCBubyByb3V0aW5nIHBvbGljeSBpczsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgZmluZHMgbm9uZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBTZXRJZGVudGlmaWVyIGZyb20gdGhpcyBzaW1wbGUgcmVjb3JkIHNldCwgb3IgYWRkIHRoZSByb3V0aW5nIHBvbGljeSBpdCB3YXMgbWVhbnQgZm9yXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcblxcdG5vdCBfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUVEwgbXVzdCBmaXQgaW4gMzIgYml0cyAoMC4uMjE0NzQ4MzY0NyBzZWNvbmRzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgOTk5OTk5OTk5OSB3aXRoXFxuIyBcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjE0NzQ4MzY0N1xcXCIuIE5lZ2F0aXZlIFRUTHMgYXJlXFxuIyB1bnRlc3RlZCwgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVFRMIG11c3QgYmUgYXQgbW9zdCAyMTQ3NDgzNjQ3IHNlY29uZHMsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBUVEwgdG8gYSAzMi1iaXQgdmFsdWU7IGFueXRoaW5nIGFib3ZlIGEgZGF5IHJhcmVseSBoZWxwcyBjYWNoaW5nIGFueXdheVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHQpXFxuXFx0biA+IDIxNDc0ODM2NDdcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDMwMCB3aXRoIFxcXCJNZW1iZXJcXG4jIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjU1XFxcIi4gTmVnYXRpdmUgd2VpZ2h0cyBhcmUgdW50ZXN0ZWQsXFxuIyBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJXZWlnaHQgbXVzdCBiZSBhdCBtb3N0IDI1NSwgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFdlaWdodCB0byBhIHZhbHVlIGluIFswLCAyNTVdOyB3ZWlnaHRzIGFyZSByZWxhdGl2ZSwgc28gc2NhbGUgdGhlIGdyb3VwIGRvd24gcHJvcG9ydGlvbmFsbHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih3KVxcblxcdG4gPiAyNTVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSG9zdGVkWm9uZU5hbWUgbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIGRvdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIGxvb2tzIHRoZSB6b25lIHVwIGJ5IHRoZSBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lIGFuZCBkb2VzIG5vdFxcbiMgbm9ybWFsaXplIHRoZSB0cmFpbGluZyBkb3Q6IHRoZSBzYW1lIHN0YWNrIGRlcGxveWVkIGNsZWFuIHdpdGhcXG4jIFxcXCJ6b25lLmV4YW1wbGUuXFxcIiBhbmQgZmFpbGVkIHdpdGggTm90Rm91bmQgZm9yIFxcXCJ6b25lLmV4YW1wbGVcXFwiICgyMDI2LTA5LTAyKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSG9zdGVkWm9uZU5hbWUgJyVzJyBpcyBtaXNzaW5nIHRoZSB0cmFpbGluZyBkb3QsIHNvIENsb3VkRm9ybWF0aW9uIGZhaWxzIHRoZSBsb29rdXAgd2l0aCBcXFxcXFxcIk5vIGhvc3RlZCB6b25lIHdpdGggbmFtZSAuLi4gZm91bmRcXFxcXFxcIlxcXCIsIFt6bl0pLFxcblxcdHNwcmludGYoXFxcIlVzZSAnJXMuJyAod2l0aCB0aGUgdHJhaWxpbmcgZG90KVxcXCIsIFt6bl0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHpuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6bilcXG5cXHR6biAhPSBcXFwiXFxcIlxcblxcdG5vdCBlbmRzd2l0aCh6biwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUcmFuc2ZlciBBY2NlbGVyYXRpb24gcmVqZWN0cyBidWNrZXQgbmFtZXMgd2l0aCBwZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBlbmRwb2ludHMgYXJlIEROUy1iYXNlZCwgc28gYnVja2V0IG5hbWVzIGNvbnRhaW5pbmdcXG4jIHBlcmlvZHMgYXJlIHJlamVjdGVkIGF0IGNyZWF0aW9uLiBPbmx5IGEgbGl0ZXJhbCBCdWNrZXROYW1lIGlzIGNoZWNrYWJsZTtcXG4jIENESy1nZW5lcmF0ZWQgbmFtZXMgbmV2ZXIgY29udGFpbiBwZXJpb2RzIGFueXdheS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2VsZXJhdGVDb25maWd1cmF0aW9uLkFjY2VsZXJhdGlvblN0YXR1c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQnVja2V0IG5hbWUgJyVzJyBjb250YWlucyBwZXJpb2RzLCB3aGljaCBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZG9lcyBub3Qgc3VwcG9ydDsgQ3JlYXRlQnVja2V0IGZhaWxzIHdpdGggXFxcXFxcXCJTMyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgYnVja2V0cyB3aXRoIHBlcmlvZHMgKC4pIGluIHRoZWlyIG5hbWVzXFxcXFxcXCJcXFwiLCBbYm5dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBidWNrZXQgd2l0aG91dCBwZXJpb2RzLCBvciBkcm9wIEFjY2VsZXJhdGVDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvdHJhbnNmZXItYWNjZWxlcmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0Ym4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CdWNrZXROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoYm4pXFxuXFx0Y29udGFpbnMoYm4sIFxcXCIuXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LWFjdGlvbi1yZXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdC1sZXZlbCBhY3Rpb25zIG5lZWQgYW4gb2JqZWN0LWxldmVsIFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIG9iamVjdC1sZXZlbCBhY3Rpb24gd2hvc2Ugc3RhdGVtZW50IGxpc3RzIG9ubHkgYnVja2V0LWxldmVsIEFSTnMgYXBwbGllc1xcbiMgdG8gbm90aGluZywgYW5kIFMzIHJlamVjdHMgdGhlIHBvbGljeS4gQSBidWNrZXQtbGV2ZWwgQVJOIGlzIHByb3ZhYmxlIHR3b1xcbiMgd2F5czogYSBsaXRlcmFsIGFybjouLi46czM6OjpuYW1lIHdpdGggbm8gXFxcIi9cXFwiIGluIHRoZSBuYW1lIHBhcnQsIG9yIGEgdmFsdWVcXG4jIHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG8gdGhlIGxvZ2ljYWwgSUQgb2YgYW4gaW4tdGVtcGxhdGUgYnVja2V0IChSZWYgYW5kXFxuIyBGbjo6R2V0QXR0IEFybiBib3RoIGRvIOKAlCB0aGUgR2V0QXR0IG9mIGEgYnVja2V0IGlzIGl0cyBidWNrZXQgQVJOKS4gRmlyZXNcXG4jIG9ubHkgd2hlbiBldmVyeSByZXNvdXJjZSBpbiB0aGUgc3RhdGVtZW50IGlzIHByb3ZhYmx5IGJ1Y2tldC1sZXZlbCwgc29cXG4jIHVucmVzb2x2YWJsZSBlbnRyaWVzIChlLmcuIEZuOjpTdWIgXFxcIiR7Qi5Bcm59LypcXFwiKSBtdXRlIHRoZSBzdGF0ZW1lbnQuXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpnZXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6cHV0b2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmRlbGV0ZW9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIGxvd2VyKGEpIGluIHtcXFwiczM6YWJvcnRtdWx0aXBhcnR1cGxvYWRcXFwiLCBcXFwiczM6cmVzdG9yZW9iamVjdFxcXCIsIFxcXCJzMzpsaXN0bXVsdGlwYXJ0dXBsb2FkcGFydHNcXFwifVxcblxcbl9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpIGlmIHIgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYge1xcblxcdHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcblxcdGNvbnRhaW5zKHIsIFxcXCI6czM6OjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KHIsIFxcXCI6OjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0bm90IGNvbnRhaW5zKHBhcnRzWzFdLCBcXFwiL1xcXCIpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBbYV0gaWYge1xcblxcdGEgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfczNicGFyX2FjdGlvbnMobmFtZSwgaSkgOj0gYWN0cyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuQWN0aW9uXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGFjdHMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IGl0LnZhbHVlOyBpc19zdHJpbmcodildXFxufVxcblxcbl9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIGkpIDo9IFtyXSBpZiB7XFxuXFx0ciA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSlcXG5cXHRpc19zdHJpbmcocilcXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gcnMgaWYge1xcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdHJzIDo9IFt2IHwgc29tZSBpdCBpbiBpdGVtczsgdiA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlLiVkXFxcIiwgW2ksIGl0LmluZGV4XSkpOyBpc19zdHJpbmcodildXFxuXFx0Y291bnQocnMpID09IGNvdW50KGl0ZW1zKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtzdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIHRhcmdldHMgb2JqZWN0cyBidXQgdGhlIHN0YXRlbWVudCdzIHJlc291cmNlcyBhcmUgYWxsIGJ1Y2tldC1sZXZlbCBBUk5zOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIkFjdGlvbiBkb2VzIG5vdCBhcHBseSB0byBhbnkgcmVzb3VyY2UocykgaW4gc3RhdGVtZW50XFxcXFxcXCJcXFwiLCBbYV0pLFxcblxcdFxcXCJBZGQgdGhlIG9iamVjdCBmb3JtIG9mIHRoZSBBUk4gKGFwcGVuZCAvKiBvciBhIGtleSBwYXR0ZXJuKSB0byBSZXNvdXJjZSwgb3IgZHJvcCB0aGUgb2JqZWN0LWxldmVsIGFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRzb21lIGEgaW4gX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIHN0LmluZGV4KVxcblxcdF9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKVxcblxcdHJzIDo9IF9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIHN0LmluZGV4KVxcblxcdGNvdW50KHJzKSA+IDBcXG5cXHRldmVyeSByIGluIHJzIHtcXG5cXHRcXHRfcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJ1Y2tldCBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIGEgUHJpbmNpcGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlc291cmNlLWJhc2VkIHBvbGljaWVzIHJlcXVpcmUgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIGluIGV2ZXJ5XFxuIyBzdGF0ZW1lbnQg4oCUIHVubGlrZSBpZGVudGl0eSBwb2xpY2llcywgd2hlcmUgY2ZuLWxpbnQtZ3JhZGUgY2hlY2tzIGFyZVxcbiMgdHVuZWQuIEFuIHVucmVzb2x2YWJsZSBQcmluY2lwYWwgdmFsdWUgc3RpbGwgY291bnRzIGFzIHByZXNlbnQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWRcXFwiLCBbc3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIHN0YXRlbWVudCBoYXMgbmVpdGhlciBQcmluY2lwYWwgbm9yIE5vdFByaW5jaXBhbDsgUzMgcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJNaXNzaW5nIHJlcXVpcmVkIGZpZWxkIFByaW5jaXBhbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIHRvIHRoZSBzdGF0ZW1lbnQg4oCUIGJ1Y2tldCBwb2xpY2llcyBhbHdheXMgbmFtZSB3aG8gdGhleSBhcHBseSB0b1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHN0LnZhbHVlLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJOb3RQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaWZlY3ljbGUgYXJjaGl2ZSB0cmFuc2l0aW9ucyBtdXN0IGNvbWUgMzArIGRheXMgYWZ0ZXIgSUEsIGFuZCBleHBpcmF0aW9uIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zM29yZF9maXggOj0gXFxcIk9yZGVyIHRoZSBsaWZlY3ljbGUgZGF5cyBzbyBhcmNoaXZlIHRyYW5zaXRpb25zIGNvbWUgYXQgbGVhc3QgMzAgZGF5cyBhZnRlciBJQSB0cmFuc2l0aW9ucyBhbmQgZXhwaXJhdGlvbiBjb21lcyBhZnRlciBldmVyeSB0cmFuc2l0aW9uXFxcIlxcblxcbl9wZl9zM29yZF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuVHJhbnNpdGlvbnNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRyYW5zaXRpb24gdG8gJXMgYXQgJXYgZGF5cyBpcyBsZXNzIHRoYW4gMzAgZGF5cyBhZnRlciB0aGUgJXMgdHJhbnNpdGlvbiBhdCAldiBkYXlzOyBTMyByZXF1aXJlcyBvYmplY3RzIHRvIHN0YXkgYXQgbGVhc3QgMzAgZGF5cyBpbiBJQSBzdG9yYWdlXFxcIiwgW3NjMiwgZDIsIHNjMSwgZDFdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQxIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQxKVxcblxcdHNjMSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MxIGluIHtcXFwiU1RBTkRBUkRfSUFcXFwiLCBcXFwiT05FWk9ORV9JQVxcXCJ9XFxuXFx0cmF3MSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGQxIDo9IHRvX251bWJlcihyYXcxKVxcblxcdHNvbWUgdDIgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDIpXFxuXFx0c2MyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzIgaW4ge1xcXCJHTEFDSUVSXFxcIiwgXFxcIkRFRVBfQVJDSElWRVxcXCJ9XFxuXFx0cmF3MiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MiAhPSBudWxsXFxuXFx0ZDIgOj0gdG9fbnVtYmVyKHJhdzIpXFxuXFx0ZDIgPCBkMSArIDMwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzICgldikgbXVzdCBiZSBncmVhdGVyIHRoYW4gVHJhbnNpdGlvbkluRGF5cyAoJXYpOyBTMyByZWplY3RzIGxpZmVjeWNsZSBydWxlcyB0aGF0IGV4cGlyZSBvYmplY3RzIGJlZm9yZSBvciB3aGVuIHRoZXkgdHJhbnNpdGlvblxcXCIsIFtlLCBkXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHJhd2UgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGUgOj0gdG9fbnVtYmVyKHJhd2UpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodClcXG5cXHRyYXdkIDo9IG9iamVjdC5nZXQodCwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2QgIT0gbnVsbFxcblxcdGQgOj0gdG9fbnVtYmVyKHJhd2QpXFxuXFx0ZSA8PSBkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHBpcmF0aW9uSW5EYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIEV4cGlyYXRpb25JbkRheXMgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBub1xcbiMgbWluaW11bSwgc28gMCBhbmQgbmVnYXRpdmVzIHJlYWNoIHRoZSBzZXJ2aWNlLiBPbmx5IHRoZSBFeHBpcmF0aW9uIGFjdGlvblxcbiMgd2FzIGJlbmNoLXZlcmlmaWVkOyBvdGhlciBkYXkgZmllbGRzIGFyZSBsZWZ0IGFsb25lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzIGlzICV2OyBTMyByZWplY3RzIHRoZSBydWxlIHdpdGggXFxcXFxcXCInRGF5cycgZm9yIEV4cGlyYXRpb24gYWN0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXFxcXFxcXCJcXFwiLCBbZF0pLFxcblxcdFxcXCJVc2UgYW4gRXhwaXJhdGlvbkluRGF5cyBvZiAxIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1ydWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdyAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3KVxcblxcdGQgPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgbGlmZWN5Y2xlIHJ1bGUgbmVlZHMgYXQgbGVhc3Qgb25lIGFjdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGVuIGFjdGlvbiBmaWVsZHMsIHZlcmJhdGltIGZyb20gdGhlIHNlcnZpY2UgZXJyb3IuIEEgZmllbGQgd2hvc2UgdmFsdWVcXG4jIGlzIGFuIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgc3RpbGwgY291bnRzIGFzIHByZXNlbnQgKGZhaWwgY2xvc2VkKS5cXG5fcGZfczNsbmFfYWN0aW9ucyA6PSB7XFxuXFx0XFxcIkFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZFxcXCIsXFxuXFx0XFxcIkV4cGlyYXRpb25EYXRlXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIkV4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXNcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIlRyYW5zaXRpb25zXFxcIixcXG59XFxuXFxuX3BmX3MzbG5hX2hhc19hY3Rpb24ocnVsZSkgaWYge1xcblxcdHNvbWUgayBpbiBfcGZfczNsbmFfYWN0aW9uc1xcblxcdG9iamVjdC5nZXQocnVsZSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIGxpZmVjeWNsZSBydWxlIHNwZWNpZmllcyBubyBhY3Rpb247IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkF0IGxlYXN0IG9uZSBvZiBbRXhwaXJhdGlvbkRhdGUsRXhwaXJhdGlvbkluRGF5cyxBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQsVHJhbnNpdGlvbiwuLi5dIG5lZWRzIHRvIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGFuIGV4cGlyYXRpb24sIHRyYW5zaXRpb24sIG9yIGFib3J0LWluY29tcGxldGUtbXVsdGlwYXJ0LXVwbG9hZCBhY3Rpb24gdG8gdGhlIHJ1bGUsIG9yIHJlbW92ZSB0aGUgcnVsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRub3QgX3BmX3MzbG5hX2hhc19hY3Rpb24oci52YWx1ZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vdGlmaWNhdGlvbiBlbnRyaWVzIG11c3Qgbm90IG92ZXJsYXAgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUzMga2VlcHMgb25lIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIHBlciBidWNrZXQgYW5kIHJlamVjdHMgaXQgd2hlbiB0d29cXG4jIGVudHJpZXMgKGFjcm9zcyBxdWV1ZS90b3BpYy9sYW1iZGEgYWxpa2UpIGNvdWxkIG1hdGNoIHRoZSBzYW1lIG9iamVjdCBldmVudDpcXG4jIG92ZXJsYXBwaW5nIGV2ZW50IHR5cGVzIEFORCBvdmVybGFwcGluZyBwcmVmaXhlcyBBTkQgb3ZlcmxhcHBpbmcgc3VmZml4ZXMuXFxuIyBBIG1pc3NpbmcgZmlsdGVyIHNpZGUgbWVhbnMgXFxcIlxcXCIgYW5kIG92ZXJsYXBzIGV2ZXJ5dGhpbmcuIFBhaXJzIHdpdGggYW5cXG4jIHVucmVzb2x2YWJsZSBldmVudCBvciBmaWx0ZXIgdmFsdWUgYXJlIHNraXBwZWQg4oCUIG92ZXJsYXAgY2Fubm90IGJlIHByb3Zlbi5cXG5cXG5fcGZfczNub19jb25maWdzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChhcnJheS5jb25jYXQoXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uUXVldWVDb25maWd1cmF0aW9uc1xcXCIpXSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5Ub3BpY0NvbmZpZ3VyYXRpb25zXFxcIildKSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5MYW1iZGFDb25maWd1cmF0aW9uc1xcXCIpXSlcXG5cXG5fcGZfczNub19ydWxlcyhjKSA6PSBydWxlcyBpZiB7XFxuXFx0ZiA6PSBvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChmKVxcblxcdGsgOj0gb2JqZWN0LmdldChmLCBcXFwiUzNLZXlcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChrKVxcblxcdHJ1bGVzIDo9IG9iamVjdC5nZXQoaywgXFxcIlJ1bGVzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkocnVsZXMpXFxufVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IFtdIGlmIHtcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gdiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA+IDBcXG5cXHR2IDo9IHZzWzBdXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gXFxcIlxcXCIgaWYge1xcblxcdHZzIDo9IFt4IHwgc29tZSByIGluIF9wZl9zM25vX3J1bGVzKGMpOyBpc19vYmplY3Qocik7IGxvd2VyKG9iamVjdC5nZXQociwgXFxcIk5hbWVcXFwiLCBcXFwiXFxcIikpID09IGtpbmQ7IHggOj0gb2JqZWN0LmdldChyLCBcXFwiVmFsdWVcXFwiLCBudWxsKV1cXG5cXHRjb3VudCh2cykgPT0gMFxcbn1cXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fcHJlX292ZXJsYXAoYSwgYikgaWYgc3RhcnRzd2l0aChiLCBhKVxcblxcbl9wZl9zM25vX3N1Zl9vdmVybGFwKGEsIGIpIGlmIGVuZHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYiwgYSlcXG5cXG4jIFxcXCJzMzpPYmplY3RDcmVhdGVkOipcXFwiIGNvdmVycyBcXFwiczM6T2JqZWN0Q3JlYXRlZDpQdXRcXFwiOyBkcm9wIHRoZSB0cmFpbGluZyBcXFwiKlxcXCJcXG4jIGFuZCBwcmVmaXgtbWF0Y2guXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIGUxID09IGUyXFxuXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIHtcXG5cXHRlbmRzd2l0aChlMSwgXFxcIjoqXFxcIilcXG5cXHRzdGFydHN3aXRoKGUyLCBzdWJzdHJpbmcoZTEsIDAsIGNvdW50KGUxKSAtIDEpKVxcbn1cXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUyLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTEsIHN1YnN0cmluZyhlMiwgMCwgY291bnQoZTIpIC0gMSkpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbm90aWZpY2F0aW9uLW92ZXJsYXBwaW5nLWZpbHRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlR3byBub3RpZmljYXRpb24gZW50cmllcyBmb3Igb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgKCclcycgYW5kICclcycpIGhhdmUgb3ZlcmxhcHBpbmcgcHJlZml4L3N1ZmZpeCBmaWx0ZXJzOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJDb25maWd1cmF0aW9uIGlzIGFtYmlndW91c2x5IGRlZmluZWQuIENhbm5vdCBoYXZlIG92ZXJsYXBwaW5nIHN1ZmZpeGVzIGluIHR3byBydWxlcyBpZiB0aGUgcHJlZml4ZXMgYXJlIG92ZXJsYXBwaW5nIGZvciB0aGUgc2FtZSBldmVudCB0eXBlLlxcXFxcXFwiXFxcIiwgW2UxLCBlMl0pLFxcblxcdFxcXCJNYWtlIHRoZSBwcmVmaXhlcyBvciBzdWZmaXhlcyBkaXNqb2ludCwgb3IgbWVyZ2UgdGhlIHR3byBlbnRyaWVzIGludG8gb25lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbm90aWZpY2F0aW9uLWhvdy10by1maWx0ZXJpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y3MgOj0gX3BmX3Mzbm9fY29uZmlncyhuYW1lKVxcblxcdHNvbWUgaSwgYSBpbiBjc1xcblxcdHNvbWUgaiwgYiBpbiBjc1xcblxcdGkgPCBqXFxuXFx0ZTEgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiRXZlbnRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhlMSlcXG5cXHRlMiA6PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUyKVxcblxcdF9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKVxcblxcdHAxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAxKVxcblxcdHAyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAyKVxcblxcdF9wZl9zM25vX3ByZV9vdmVybGFwKHAxLCBwMilcXG5cXHRzMSA6PSBfcGZfczNub19maWx0ZXJfdmFsKGEudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMSlcXG5cXHRzMiA6PSBfcGZfczNub19maWx0ZXJfdmFsKGIudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMilcXG5cXHRfcGZfczNub19zdWZfb3ZlcmxhcChzMSwgczIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdExvY2tDb25maWd1cmF0aW9uIG9uIGl0cyBvd24gZG9lcyBOT1QgcmVxdWlyZSBPYmplY3RMb2NrRW5hYmxlZCDigJRcXG4jIFMzIGFjY2VwdHMgT2JqZWN0IExvY2sgb24gYW4gZXhpc3RpbmcgdmVyc2lvbmVkIGJ1Y2tldCAoYmVuY2ggczA1YiBkZXBsb3llZFxcbiMgY2xlYW4pLiBXaGF0IGl0IGRvZXMgcmVxdWlyZSBpcyB2ZXJzaW9uaW5nLiBXaGVuIE9iamVjdExvY2tFbmFibGVkIGlzIHRydWVcXG4jIHRoZSBidWNrZXQgaXMgY3JlYXRlZCBsb2NrLWVuYWJsZWQgYW5kIHZlcnNpb25pbmcgY29tZXMgd2l0aCBpdCwgc28gdGhlIHJ1bGVcXG4jIGZpcmVzIG9ubHkgd2hlbiBsb2NrLWVuYWJsZW1lbnQgaXMgcHJvdmFibHkgb2ZmIChrZXkgbGl0ZXJhbGx5IGFic2VudCBvclxcbiMgbGl0ZXJhbCBmYWxzZSkgYW5kIHZlcnNpb25pbmcgaXMgcHJvdmFibHkgbm90IGVuYWJsZWQuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJPYmplY3RMb2NrRW5hYmxlZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gZmFsc2VcXG59XFxuXFxuX3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIk9iamVjdExvY2tDb25maWd1cmF0aW9uIGlzIHNldCBvbiBhIGJ1Y2tldCB3aG9zZSB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQgdG8gYXBwbHkgYSBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJywgb3Igc2V0IE9iamVjdExvY2tFbmFibGVkOiB0cnVlIHRvIGNyZWF0ZSB0aGUgYnVja2V0IGxvY2stZW5hYmxlZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSlcXG5cXHRfcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdCBMb2NrIGZvcmJpZHMgc3VzcGVuZGluZyB2ZXJzaW9uaW5nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdCBMb2NrIGZvcmNlLWVuYWJsZXMgdmVyc2lvbmluZyBhdCBjcmVhdGlvbiwgc28gYSB0ZW1wbGF0ZSB0aGF0IGFsc29cXG4jIHN1c3BlbmRzIHZlcnNpb25pbmcgY29udHJhZGljdHMgaXRzZWxmIGFuZCB0aGUgaGFuZGxlcidzIFB1dEJ1Y2tldFZlcnNpb25pbmdcXG4jIGNhbGwgaXMgcmVqZWN0ZWQuIEZpcmVzIG9ubHkgb24gYSBsaXRlcmFsIFxcXCJTdXNwZW5kZWRcXFwiLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZSBidXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gc3VzcGVuZHMgdmVyc2lvbmluZzsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBpcyBwcmVzZW50IG9uIHRoaXMgYnVja2V0LCBzbyB0aGUgdmVyc2lvbmluZyBzdGF0ZSBjYW5ub3QgYmUgY2hhbmdlZC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIChvciBkcm9wIGl0IOKAlCBPYmplY3QgTG9jayBlbmFibGVzIHZlcnNpb25pbmcgaXRzZWxmKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgcmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0IG5lZWRzIHZlcnNpb25pbmcgZW5hYmxlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZGVzdGluYXRpb24gc2lkZSBvZiB3aGF0IHBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmcgY2hlY2tzIG9uXFxuIyB0aGUgc291cmNlLiBEZXN0aW5hdGlvbi5CdWNrZXQgaXMgbm9ybWFsbHkgRm46OkdldEF0dC9SZWYgdG8gYW4gaW4tdGVtcGxhdGVcXG4jIGJ1Y2tldDsgcmVzb2x2ZSgpIHR1cm5zIGJvdGggaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCwgc28gdGhlXFxuIyBkZXN0aW5hdGlvbidzIG93biBwcm9wZXJ0aWVzIGFyZSByZWFkYWJsZS4gRXh0ZXJuYWwgZGVzdGluYXRpb24gQVJOcyByZXNvbHZlXFxuIyB0byBzdHJpbmdzIHRoYXQgYXJlIG5vdCBsb2dpY2FsIElEcyBhbmQgc2tpcC4gVmVyc2lvbmluZyBpcyBcXFwibm90IGVuYWJsZWRcXFwiXFxuIyB3aGVuIFZlcnNpb25pbmdDb25maWd1cmF0aW9uIGlzIGxpdGVyYWxseSBhYnNlbnQgKHByb3ZlbiB2aWFcXG4jIGlucHV0LnJlc291cmNlcywgc2VlIEFHRU5UUy5tZCkgb3IgU3RhdHVzIHJlc29sdmVzIHRvIFxcXCJTdXNwZW5kZWRcXFwiOyBhblxcbiMgdW5yZXNvbHZhYmxlIFN0YXR1cyBza2lwcy5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tkZXN0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpIGlmIHtcXG5cXHRyZXNvbHZlKGRlc3QsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tZGVzdC12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5EZXN0aW5hdGlvbi5CdWNrZXRcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGJ1Y2tldCAnJXMnIGRvZXMgbm90IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJEZXN0aW5hdGlvbiBidWNrZXQgbXVzdCBoYXZlIHZlcnNpb25pbmcgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW2Rlc3RdKSxcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3JlcGxpY2F0aW9uLXJlcXVpcmVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0ZGVzdCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSkpXFxuXFx0aXNfc3RyaW5nKGRlc3QpXFxuXFx0ZGVzdCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRfcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIHJlcXVpcmVzIHZlcnNpb25pbmcgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc291cmNlIGJ1Y2tldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDpgZXlj43jgavjgZnjgovjga7jga8gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24g44GM5paH5a2X44Gp44GK44KK5LiN5Zyo77yIaW5wdXQucmVzb3VyY2VzIOOBp1xcbiMg6Ki85piO44CBQUdFTlRTLm1kIOWPgueFp++8ieOBi+OAgVN0YXR1cyDjgYzjg6rjg4bjg6njg6vjgacgXFxcIlN1c3BlbmRlZFxcXCIg44Gu44Go44GN44Gg44GR44CCXFxuIyDmnKrop6Pmsbrjg4jjg7zjgq/jg7Pjga8gT0sg5omx44GE77yIcmVzb2x2ZSgpIOOBr+OCreODvOS4jeWcqOOBqOacquino+axuuOBruS4oeaWueOBpyB1bmRlZmluZWQg44GrXFxuIyDjgarjgovjgZ/jgoHjgIFgbm90IHJlc29sdmUoLi4uKWAg44Gn44Gv5LiN5Zyo44KS6Ki85piO44Gn44GN44Gq44GEIOKAlCAyMDI2LTA5LTAyIOWun+a4rO+8ieOAglxcbl9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IGJ1Y2tldCB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGF0IGRlcGxveSB0aW1lIChJbnZhbGlkUmVxdWVzdDogVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0KVxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBzb3VyY2UgYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdF9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy13ZWJzaXRlLXJlZGlyZWN0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlZGlyZWN0QWxsUmVxdWVzdHNUbyBleGNsdWRlcyBldmVyeSBvdGhlciB3ZWJzaXRlIHNldHRpbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHJlZGlyZWN0cyB0aGUgd2hvbGUgc2l0ZSwgc28gUzMgcmVqZWN0cyBhbnkgc2libGluZ1xcbiMgd2Vic2l0ZSBzZXR0aW5nIGFsb25nc2lkZSBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJXZWJzaXRlQ29uZmlndXJhdGlvbiBjb21iaW5lcyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gd2l0aCAlczsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiW0luZGV4RG9jdW1lbnQsIEVycm9yRG9jdW1lbnQsIFJvdXRpbmdSdWxlc10gc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaWYgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gYWxvbmUsIG9yIGRyb3AgaXQgYW5kIGNvbmZpZ3VyZSB0aGUgd2Vic2l0ZSB3aXRoIEluZGV4RG9jdW1lbnQvRXJyb3JEb2N1bWVudC9Sb3V0aW5nUnVsZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC13ZWJzaXRlY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHR3YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uXFxcIilcXG5cXHRpc19vYmplY3Qod2MpXFxuXFx0b2JqZWN0LmdldCh3YywgXFxcIlJlZGlyZWN0QWxsUmVxdWVzdHNUb1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4ge1xcXCJJbmRleERvY3VtZW50XFxcIiwgXFxcIkVycm9yRG9jdW1lbnRcXFwiLCBcXFwiUm91dGluZ1J1bGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHdjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGTEVYSUJMRSBtb2RlIG5lZWRzIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIE9GRiBmb3JiaWRzIGl0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2NoZndfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXNjaGVkdWxlci1zY2hlZHVsZS1mbGV4aWJsZXRpbWV3aW5kb3cuaHRtbFxcXCJcXG5cXG5fcGZfc2NoZndfZnR3KG5hbWUpIDo9IGZ0dyBpZiB7XFxuXFx0ZnR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93XFxcIilcXG5cXHRpc19vYmplY3QoZnR3KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgRkxFWElCTEUgYnV0IE1heGltdW1XaW5kb3dJbk1pbnV0ZXMgaXMgbWlzc2luZzsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBiZSBwcm92aWRlZCB3aGVuIEZsZXhpYmxlVGltZVdpbmRvd01vZGUgaXMgc2V0IHRvIEZMRVhJQkxFXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgTWF4aW11bVdpbmRvd0luTWludXRlcyAoMS0xNDQwKSwgb3Igc3dpdGNoIE1vZGUgdG8gT0ZGXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIkZMRVhJQkxFXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3cuTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsXFxuXFx0XFxcIkZsZXhpYmxlVGltZVdpbmRvdy5Nb2RlIGlzIE9GRiBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBzZXQ7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzIG11c3Qgbm90IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gT0ZGXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIG9yIHN3aXRjaCBNb2RlIHRvIEZMRVhJQkxFXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIk9GRlxcXCJcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzY2hlZHVsZXJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBTY2hlZHVsZXIgcmF0ZSgpIHZhbHVlIG11c3QgYmUgcG9zaXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDI3IHZhbGlkYXRlcyByYXRlKCkgYm91bmRzIGZvciBBV1M6OkV2ZW50czo6UnVsZSBidXQgbm90XFxuIyBmb3IgQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlIOKAlCBzYW1lIGNvbnN0cmFpbnQgZmFtaWx5LCBkaWZmZXJlbnQgcmVzb3VyY2UuXFxuIyBPbmx5IHRoZSB2YWx1ZSBib3VuZCBpcyBjaGVja2VkIGhlcmU7IHVuaXQgc3BlbGxpbmdzIGRpZmZlciBiZXR3ZWVuIHRoZSB0d29cXG4jIHNlcnZpY2VzIGFuZCB3ZXJlIG5vdCBtZWFzdXJlZCBmb3IgU2NoZWR1bGVyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJhdGUgdmFsdWUgaW4gJyVzJyBpcyBub3QgcG9zaXRpdmU7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIFNjaGVkdWxlIEV4cHJlc3Npb24gJXMuXFxcXFxcXCJcXFwiLCBbZXhwciwgZXhwcl0pLFxcblxcdFxcXCJVc2UgYSByYXRlIG9mIDEgb3IgbW9yZSAoZS5nLiByYXRlKDUgbWludXRlcykpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NjaGVkdWxlci9sYXRlc3QvVXNlckd1aWRlL3NjaGVkdWxlLXR5cGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlZHVsZUV4cHJlc3Npb25cXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcInJhdGUoXFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiKVxcXCIpXFxuXFx0aW5uZXIgOj0gdHJpbV9zcGFjZShzdWJzdHJpbmcodCwgNSwgY291bnQodCkgLSA2KSlcXG5cXHRwYXJ0cyA6PSBzcGxpdChpbm5lciwgXFxcIiBcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHBhcnRzWzBdKVxcblxcdG4gPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXRvcGljLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyB0b3BpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICcuZmlmbycgKGFuZCAnLmZpZm8nIG5hbWVzIHJlcXVpcmUgRmlmb1RvcGljKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZpZm9fZml4IDo9IFxcXCJHaXZlIEZJRk8gdG9waWNzIGEgVG9waWNOYW1lIGVuZGluZyBpbiAnLmZpZm8nIChvciBkcm9wIFRvcGljTmFtZSB0byBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lKSwgYW5kIHNldCBGaWZvVG9waWM6IHRydWUgd2hlbmV2ZXIgdGhlIG5hbWUgZW5kcyBpbiAnLmZpZm8nXFxcIlxcblxcbl9wZl9zbnNmaWZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWNyZWF0ZS1maWZvLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBGaWZvVG9waWMg44GM5a2Y5Zyo44GX44CB44Oq44OG44Op44OrIGZhbHNlIOS7peWklu+8iHRydWUg44KE44OI44O844Kv44Oz77yJ44Gq44KJ44CMRklGTyDjgYvjgoLjgZfjgozjgarjgYTjgI3mibHjgYRcXG5fcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpIGlmIHtcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIilcXG5cXHRub3QgdiBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGaWZvVG9waWMgaXMgdHJ1ZSBidXQgVG9waWNOYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5maWZvJzsgU05TIHJlamVjdHMgdGhlIHRvcGljIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0bm90IGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgZW5kcyB3aXRoICcuZmlmbycgYnV0IEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZTsgU05TIHJlamVjdHMgdGhlIHRvcGljIG5hbWUgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcblxcdG5vdCBfcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBU0wgTmV4dC9EZWZhdWx0L0Nob2ljZXMgbXVzdCByZWZlcmVuY2UgYSBkZWZpbmVkIHN0YXRlICh0b3AtbGV2ZWwgc3RhdGVzOyBhIGRhbmdsaW5nIFN0YXJ0QXQgaXMgY292ZXJlZCBieSBlbmdpbmUgcnVsZSBFMzYwMSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbl9maXggOj0gXFxcIlBvaW50IE5leHQvRGVmYXVsdC9DaG9pY2VzIGF0IGFuIGV4aXN0aW5nIHN0YXRlIG5hbWVcXFwiXFxuXFxuX3BmX3Nmbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1zdGF0ZXMuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuX2FzbChuYW1lKSA6PSBhc2wgaWYge1xcblxcdGRlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiKVxcblxcdGlzX3N0cmluZyhkZWYpXFxuXFx0YXNsIDo9IGpzb24udW5tYXJzaGFsKGRlZilcXG5cXHRpc19vYmplY3QoYXNsKVxcbn1cXG5cXG5fcGZfc2ZuX2RlZmluZWQoYXNsKSA6PSB7c24gfCBzb21lIHNuLCBfIGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pfVxcblxcbiMgTk9URTogYSBkYW5nbGluZyBTdGFydEF0IGlzIGRlbGliZXJhdGVseSBOT1QgY2hlY2tlZCBoZXJlIOKAlCB0aGUgZW5naW5lJ3NcXG4jIGJ1aWx0LWluIHJ1bGUgRTM2MDEgKEVSUk9SL0NGTl9MSU5UKSBhbHJlYWR5IGNvdmVycyBpdC4gVmVyaWZpZWQgYWdhaW5zdFxcbiMgQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZSAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDE6IEUzNjAxIGZpcmVzIGZvclxcbiMgU3RhcnRBdCBvbmx5IGFuZCBkb2VzIG5vdCBjaGVjayBOZXh0L0RlZmF1bHQvQ2hvaWNlcywgd2hpY2ggaXMgd2hhdCB0aGlzXFxuIyBydWxlIGFkZHMuXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgcmVmZXJlbmNlcyBzdGF0ZSAnJXMnIHZpYSAlcywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWRcXFwiLCBbc25hbWUsIHRhcmdldCwga2V5XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJOZXh0XFxcIiwgXFxcIkRlZmF1bHRcXFwifVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGhhcyBhIENob2ljZSBydWxlIHJlZmVyZW5jaW5nIHN0YXRlICclcycsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXRdKSxcXG5cXHRfcGZfc2ZuX2ZpeCwgX3BmX3Nmbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3Nmbl9hc2wobmFtZSlcXG5cXHRzb21lIHNuYW1lLCBzdCBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzdClcXG5cXHRjaG9pY2VzIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJDaG9pY2VzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoY2hvaWNlcylcXG5cXHRzb21lIGMgaW4gY2hvaWNlc1xcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdG5vdCB0YXJnZXQgaW4gX3BmX3Nmbl9kZWZpbmVkKGFzbClcXG59XFxuXCJcbiAgfVxuXTtcbiJdfQ==