@microsoft/terraform-cdk-constructs 1.3.0 → 1.4.0

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.
Files changed (76) hide show
  1. package/.jsii +22673 -19618
  2. package/API.md +25592 -20586
  3. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  4. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  5. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  6. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  7. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  8. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  9. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  10. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  11. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  12. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  13. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  14. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  15. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  16. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  17. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +7 -0
  18. package/lib/azure-policyassignment/lib/policy-assignment.js +11 -2
  19. package/lib/azure-policydefinition/lib/policy-definition.d.ts +21 -0
  20. package/lib/azure-policydefinition/lib/policy-definition.js +40 -3
  21. package/lib/azure-policydefinition/test/policy-definition.spec.js +211 -1
  22. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  23. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  24. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  25. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  26. package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
  27. package/lib/azure-roledefinition/lib/role-definition.js +1 -1
  28. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  29. package/lib/azure-subnet/lib/subnet.js +1 -1
  30. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  31. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  32. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  33. package/lib/azure-virtualnetworkmanager/lib/index.d.ts +5 -0
  34. package/lib/azure-virtualnetworkmanager/lib/index.js +6 -1
  35. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.d.ts +24 -0
  36. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.js +169 -0
  37. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.d.ts +32 -0
  38. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.js +206 -0
  39. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.d.ts +170 -0
  40. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +214 -0
  41. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.d.ts +175 -0
  42. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +206 -0
  43. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  44. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  45. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  46. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  47. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  48. package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.d.ts +225 -0
  49. package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.js +389 -0
  50. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +56 -0
  51. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +29 -2
  52. package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.d.ts +6 -0
  53. package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.js +292 -0
  54. package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.d.ts +6 -0
  55. package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.js +430 -0
  56. package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.d.ts +6 -0
  57. package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.js +372 -0
  58. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +2 -1
  59. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +30 -3
  60. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +105 -1
  61. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  62. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +28 -0
  63. package/lib/core-azure/lib/azapi/azapi-resource.js +60 -10
  64. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  65. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  66. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  67. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  68. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  69. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  70. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  71. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  72. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  73. package/lib/testing/index.js +2 -2
  74. package/lib/testing/lib/cleanup.js +1 -1
  75. package/lib/testing/lib/metadata.js +1 -1
  76. package/package.json +1 -1
@@ -423,6 +423,216 @@ describe("PolicyDefinition - Unified Implementation", () => {
423
423
  expect(policyDefinition).toBeDefined();
424
424
  expect(policyDefinition.props.parameters).toBeDefined();
425
425
  });
426
+ it("should preserve complex allOf conditions with multiple field comparisons", () => {
427
+ const complexRule = {
428
+ if: {
429
+ allOf: [
430
+ {
431
+ field: "type",
432
+ equals: "Microsoft.Storage/storageAccounts",
433
+ },
434
+ {
435
+ field: "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
436
+ notEquals: "Deny",
437
+ },
438
+ ],
439
+ },
440
+ then: {
441
+ effect: "audit",
442
+ },
443
+ };
444
+ const policyDefinition = new policy_definition_1.PolicyDefinition(stack, "ComplexAllOf", {
445
+ name: "complex-allof-policy",
446
+ displayName: "Complex AllOf Policy",
447
+ policyRule: complexRule,
448
+ });
449
+ expect(policyDefinition).toBeDefined();
450
+ expect(policyDefinition.props.policyRule).toEqual(complexRule);
451
+ // Synthesize and verify the structure is preserved
452
+ const synthesized = cdktf_1.Testing.synth(stack);
453
+ const stackConfig = JSON.parse(synthesized);
454
+ const azapiResource = Object.values(stackConfig.resource.azapi_resource)[0];
455
+ // The body is jsonencode() wrapped, so we need to parse the actual policy rule from props
456
+ expect(policyDefinition.props.policyRule.if.allOf).toHaveLength(2);
457
+ expect(policyDefinition.props.policyRule.if.allOf[0].field).toBe("type");
458
+ expect(policyDefinition.props.policyRule.if.allOf[0].equals).toBe("Microsoft.Storage/storageAccounts");
459
+ expect(policyDefinition.props.policyRule.if.allOf[1].field).toBe("Microsoft.Storage/storageAccounts/networkAcls.defaultAction");
460
+ expect(policyDefinition.props.policyRule.if.allOf[1].notEquals).toBe("Deny");
461
+ expect(policyDefinition.props.policyRule.then.effect).toBe("audit");
462
+ // Verify the synthesized config has the body property set
463
+ expect(azapiResource.body).toBeDefined();
464
+ });
465
+ it("should preserve Azure Policy expressions without converting them", () => {
466
+ const rule = {
467
+ if: {
468
+ field: "location",
469
+ notIn: "[parameters('allowedLocations')]",
470
+ },
471
+ then: {
472
+ effect: "[parameters('effect')]",
473
+ },
474
+ };
475
+ new policy_definition_1.PolicyDefinition(stack, "AzurePolicyExpressions", {
476
+ name: "azure-expressions-policy",
477
+ policyRule: rule,
478
+ parameters: {
479
+ allowedLocations: { type: "Array" },
480
+ effect: { type: "String" },
481
+ },
482
+ });
483
+ const synthesized = cdktf_1.Testing.synth(stack);
484
+ const stackConfig = JSON.parse(synthesized);
485
+ const azapiResource = Object.values(stackConfig.resource.azapi_resource)[0];
486
+ // Verify Azure Policy expressions are preserved in the construct's props
487
+ expect(rule.if.notIn).toBe("[parameters('allowedLocations')]");
488
+ expect(rule.then.effect).toBe("[parameters('effect')]");
489
+ // Verify the synthesized config has the body property set
490
+ expect(azapiResource.body).toBeDefined();
491
+ });
492
+ it("should preserve DeployIfNotExists policy with ARM template", () => {
493
+ const complexRule = {
494
+ if: {
495
+ field: "type",
496
+ equals: "Microsoft.Network/virtualNetworks",
497
+ },
498
+ then: {
499
+ effect: "DeployIfNotExists",
500
+ details: {
501
+ type: "Microsoft.Network/networkManagers/networkGroups/staticMembers",
502
+ deploymentScope: "subscription",
503
+ existenceScope: "subscription",
504
+ roleDefinitionIds: [
505
+ "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
506
+ ],
507
+ deployment: {
508
+ location: "[field('location')]",
509
+ properties: {
510
+ mode: "incremental",
511
+ resourceGroup: "[variables('avnmResourceGroup')]",
512
+ subscriptionId: "[parameters('avnmSubscriptionId')]",
513
+ template: {
514
+ $schema: "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
515
+ contentVersion: "1.0.0.0",
516
+ parameters: {
517
+ vnetId: {
518
+ type: "string",
519
+ },
520
+ },
521
+ variables: {
522
+ staticMemberName: "[guid(parameters('vnetId'))]",
523
+ },
524
+ resources: [
525
+ {
526
+ type: "Microsoft.Network/networkManagers/networkGroups/staticMembers",
527
+ apiVersion: "2023-04-01",
528
+ name: "[concat(parameters('avnmId'), '/', variables('staticMemberName'))]",
529
+ properties: {
530
+ resourceId: "[parameters('vnetId')]",
531
+ },
532
+ },
533
+ ],
534
+ outputs: {
535
+ memberId: {
536
+ type: "string",
537
+ value: "[resourceId('Microsoft.Network/networkManagers/networkGroups/staticMembers', variables('staticMemberName'))]",
538
+ },
539
+ },
540
+ },
541
+ parameters: {
542
+ vnetId: {
543
+ value: "[field('id')]",
544
+ },
545
+ },
546
+ },
547
+ },
548
+ },
549
+ },
550
+ };
551
+ const policyDefinition = new policy_definition_1.PolicyDefinition(stack, "DeployIfNotExistsPolicy", {
552
+ name: "deploy-if-not-exists-policy",
553
+ displayName: "Deploy If Not Exists with ARM Template",
554
+ policyRule: complexRule,
555
+ parameters: {
556
+ avnmSubscriptionId: { type: "String" },
557
+ },
558
+ });
559
+ expect(policyDefinition).toBeDefined();
560
+ const synthesized = cdktf_1.Testing.synth(stack);
561
+ const stackConfig = JSON.parse(synthesized);
562
+ const azapiResource = Object.values(stackConfig.resource.azapi_resource)[0];
563
+ const details = policyDefinition.props.policyRule.then.details;
564
+ // Verify deployment structure is preserved (not converted to null)
565
+ expect(details.deployment).toBeDefined();
566
+ expect(details.deployment.location).toBe("[field('location')]");
567
+ expect(details.deployment.properties).toBeDefined();
568
+ expect(details.deployment.properties.mode).toBe("incremental");
569
+ expect(details.deployment.properties.resourceGroup).toBe("[variables('avnmResourceGroup')]");
570
+ expect(details.deployment.properties.subscriptionId).toBe("[parameters('avnmSubscriptionId')]");
571
+ // Verify ARM template is fully preserved (not converted to null)
572
+ const template = details.deployment.properties.template;
573
+ expect(template).toBeDefined();
574
+ expect(template.$schema).toBe("https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#");
575
+ expect(template.contentVersion).toBe("1.0.0.0");
576
+ expect(template.parameters).toBeDefined();
577
+ expect(template.parameters.vnetId).toBeDefined();
578
+ expect(template.variables).toBeDefined();
579
+ expect(template.variables.staticMemberName).toBe("[guid(parameters('vnetId'))]");
580
+ expect(template.resources).toHaveLength(1);
581
+ expect(template.resources[0].name).toBe("[concat(parameters('avnmId'), '/', variables('staticMemberName'))]");
582
+ expect(template.outputs).toBeDefined();
583
+ expect(template.outputs.memberId.value).toBe("[resourceId('Microsoft.Network/networkManagers/networkGroups/staticMembers', variables('staticMemberName'))]");
584
+ // Verify ARM template parameters are preserved
585
+ const deploymentParams = details.deployment.properties.parameters;
586
+ expect(deploymentParams).toBeDefined();
587
+ expect(deploymentParams.vnetId.value).toBe("[field('id')]");
588
+ // Verify schema validation is disabled to allow complex nested structures
589
+ expect(azapiResource.schema_validation_enabled).toBe(false);
590
+ expect(azapiResource.ignore_missing_property).toBe(true);
591
+ // Verify the synthesized config has the body property set
592
+ expect(azapiResource.body).toBeDefined();
593
+ });
594
+ it("should preserve deeply nested logical operators", () => {
595
+ const complexRule = {
596
+ if: {
597
+ allOf: [
598
+ {
599
+ field: "type",
600
+ equals: "Microsoft.Network/virtualNetworks",
601
+ },
602
+ {
603
+ anyOf: [
604
+ {
605
+ field: "Microsoft.Network/virtualNetworks/enableDdosProtection",
606
+ equals: "false",
607
+ },
608
+ {
609
+ not: {
610
+ field: "Microsoft.Network/virtualNetworks/subnets[*].serviceEndpoints[*].service",
611
+ contains: "Microsoft.Storage",
612
+ },
613
+ },
614
+ ],
615
+ },
616
+ ],
617
+ },
618
+ then: {
619
+ effect: "audit",
620
+ },
621
+ };
622
+ const policyDefinition = new policy_definition_1.PolicyDefinition(stack, "DeeplyNested", {
623
+ name: "deeply-nested-policy",
624
+ policyRule: complexRule,
625
+ });
626
+ expect(policyDefinition.props.policyRule).toEqual(complexRule);
627
+ const synthesized = cdktf_1.Testing.synth(stack);
628
+ const stackConfig = JSON.parse(synthesized);
629
+ const azapiResource = Object.values(stackConfig.resource.azapi_resource)[0];
630
+ // Verify the deeply nested structure is preserved in the construct's props
631
+ expect(policyDefinition.props.policyRule.if.allOf[1].anyOf[1].not).toBeDefined();
632
+ expect(policyDefinition.props.policyRule.if.allOf[1].anyOf[1].not.field).toBe("Microsoft.Network/virtualNetworks/subnets[*].serviceEndpoints[*].service");
633
+ // Verify the synthesized config has the body property set
634
+ expect(azapiResource.body).toBeDefined();
635
+ });
426
636
  });
427
637
  describe("Error Handling", () => {
428
638
  it("should handle invalid API versions gracefully", () => {
@@ -593,4 +803,4 @@ describe("PolicyDefinition - Unified Implementation", () => {
593
803
  });
594
804
  });
595
805
  });
596
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1wb2xpY3lkZWZpbml0aW9uL3Rlc3QvcG9saWN5LWRlZmluaXRpb24uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7QUFFSCxpQ0FBZ0M7QUFDaEMsK0JBQStCO0FBQy9CLGtHQUE2RjtBQUM3RiwyR0FBeUc7QUFDekcsZ0VBR2tDO0FBQ2xDLGdGQUcwQztBQUUxQyxRQUFRLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO0lBQ3pELElBQUksR0FBYyxDQUFDO0lBQ25CLElBQUksS0FBMkIsQ0FBQztJQUNoQyxJQUFJLE9BQTBCLENBQUM7SUFFL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkQsT0FBTyxHQUFHLHVDQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZDLGtEQUFrRDtRQUNsRCxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsb0JBQW9CLENBQzFCLGtEQUFzQixFQUN0QiwwREFBOEIsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsK0JBQStCO1FBQ2pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEdBQUcsRUFBRTtZQUNsRixNQUFNLEtBQUssR0FBMEI7Z0JBQ25DLElBQUksRUFBRSxhQUFhO2dCQUNuQixVQUFVLEVBQUU7b0JBQ1YsRUFBRSxFQUFFO3dCQUNGLEtBQUssRUFBRSxxQkFBcUI7d0JBQzVCLE1BQU0sRUFBRSxP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Q0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO2dCQUNqRSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixJQUFJLEVBQUUsU0FBUztnQkFDZixVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTthQUNsRCxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVqRCxNQUFNLHNCQUFzQixHQUFHLElBQUksb0NBQWdCLENBQ2pELEtBQUssRUFDTCx3QkFBd0IsRUFDeEI7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsSUFBSSxFQUFFLHlCQUF5QjtnQkFDL0IsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7YUFDbEQsQ0FDRixDQUFDO1lBRUYsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcHJlaGVuc2l2ZSB0ZXN0cyBmb3IgdGhlIHVuaWZpZWQgUG9saWN5RGVmaW5pdGlvbiBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgdGVzdCBzdWl0ZSB2YWxpZGF0ZXMgdGhlIHVuaWZpZWQgUG9saWN5RGVmaW5pdGlvbiBjbGFzcyB0aGF0IHVzZXNcbiAqIHRoZSBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29yay4gVGVzdHMgY292ZXIgYXV0b21hdGljIHZlcnNpb24gcmVzb2x1dGlvbixcbiAqIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZywgc2NoZW1hIHZhbGlkYXRpb24sIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uLCBhbmRcbiAqIHBvbGljeS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuICovXG5cbmltcG9ydCB7IFRlc3RpbmcgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQXBpVmVyc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2FwaS12ZXJzaW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IFZlcnNpb25TdXBwb3J0TGV2ZWwgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5pbXBvcnQge1xuICBQb2xpY3lEZWZpbml0aW9uLFxuICBQb2xpY3lEZWZpbml0aW9uUHJvcHMsXG59IGZyb20gXCIuLi9saWIvcG9saWN5LWRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEFMTF9QT0xJQ1lfREVGSU5JVElPTl9WRVJTSU9OUyxcbiAgUE9MSUNZX0RFRklOSVRJT05fVFlQRSxcbn0gZnJvbSBcIi4uL2xpYi9wb2xpY3ktZGVmaW5pdGlvbi1zY2hlbWFzXCI7XG5cbmRlc2NyaWJlKFwiUG9saWN5RGVmaW5pdGlvbiAtIFVuaWZpZWQgSW1wbGVtZW50YXRpb25cIiwgKCkgPT4ge1xuICBsZXQgYXBwOiBjZGt0Zi5BcHA7XG4gIGxldCBzdGFjazogY2RrdGYuVGVycmFmb3JtU3RhY2s7XG4gIGxldCBtYW5hZ2VyOiBBcGlWZXJzaW9uTWFuYWdlcjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIHN0YWNrID0gbmV3IGNka3RmLlRlcnJhZm9ybVN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gICAgbWFuYWdlciA9IEFwaVZlcnNpb25NYW5hZ2VyLmluc3RhbmNlKCk7XG5cbiAgICAvLyBFbnN1cmUgUG9saWN5IERlZmluaXRpb24gc2NoZW1hcyBhcmUgcmVnaXN0ZXJlZFxuICAgIHRyeSB7XG4gICAgICBtYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2VUeXBlKFxuICAgICAgICBQT0xJQ1lfREVGSU5JVElPTl9UWVBFLFxuICAgICAgICBBTExfUE9MSUNZX0RFRklOSVRJT05fVkVSU0lPTlMsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZ25vcmUgaWYgYWxyZWFkeSByZWdpc3RlcmVkXG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZShcIkNvbnN0cnVjdG9yIGFuZCBCYXNpYyBQcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjcmVhdGUgcG9saWN5IGRlZmluaXRpb24gd2l0aCBhdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHtcbiAgICAgICAgICBpZjoge1xuICAgICAgICAgICAgZmllbGQ6IFwidGFnc1snRW52aXJvbm1lbnQnXVwiLFxuICAgICAgICAgICAgZXhpc3RzOiBcImZhbHNlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgICBlZmZlY3Q6IFwiZGVueVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHByb3BzLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24pLnRvQmVJbnN0YW5jZU9mKFBvbGljeURlZmluaXRpb24pO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMS0wNi0wMVwiKTsgLy8gTGF0ZXN0IHZlcnNpb25cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzKS50b0JlKHByb3BzKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLm5hbWUpLnRvQmUoXCJ0ZXN0LXBvbGljeVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBwb2xpY3kgZGVmaW5pdGlvbiB3aXRoIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5LXBpbm5lZFwiLFxuICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjEtMDYtMDFcIixcbiAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgIGlmOiB7XG4gICAgICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXG4gICAgICAgICAgICBlcXVhbHM6IFwiTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgICBlZmZlY3Q6IFwiYXVkaXRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICBwcm9wcyxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjEtMDYtMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgcG9saWN5IGRlZmluaXRpb24gd2l0aCBhbGwgb3B0aW9uYWwgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5LWZ1bGxcIixcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVGVzdCBQb2xpY3kgRGVmaW5pdGlvblwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJBIHRlc3QgcG9saWN5IGRlZmluaXRpb24gZm9yIHVuaXQgdGVzdGluZ1wiLFxuICAgICAgICBwb2xpY3lUeXBlOiBcIkN1c3RvbVwiLFxuICAgICAgICBtb2RlOiBcIkFsbFwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgIGZpZWxkOiBcImxvY2F0aW9uXCIsXG4gICAgICAgICAgICBub3RJbjogW1wiZWFzdHVzXCIsIFwid2VzdHVzXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhlbjoge1xuICAgICAgICAgICAgZWZmZWN0OiBcImRlbnlcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZExvY2F0aW9uczoge1xuICAgICAgICAgICAgdHlwZTogXCJBcnJheVwiLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiQWxsb3dlZCBsb2NhdGlvbnNcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxpc3Qgb2YgYWxsb3dlZCBsb2NhdGlvbnMgZm9yIHJlc291cmNlc1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNhdGVnb3J5OiBcIkdlbmVyYWxcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcIm1ldGFkYXRhXCJdLFxuICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICBlbmFibGVNaWdyYXRpb25BbmFseXNpczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlVHJhbnNmb3JtYXRpb246IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHByb3BzLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMuZGlzcGxheU5hbWUpLnRvQmUoXCJUZXN0IFBvbGljeSBEZWZpbml0aW9uXCIpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMuZGVzY3JpcHRpb24pLnRvQmUoXG4gICAgICAgIFwiQSB0ZXN0IHBvbGljeSBkZWZpbml0aW9uIGZvciB1bml0IHRlc3RpbmdcIixcbiAgICAgICk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5wb2xpY3lUeXBlKS50b0JlKFwiQ3VzdG9tXCIpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMubW9kZSkudG9CZShcIkFsbFwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLnBhcmFtZXRlcnMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5tZXRhZGF0YSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHVzZSBkZWZhdWx0IG5hbWUgd2hlbiBuYW1lIGlzIG5vdCBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzID0ge1xuICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgICAgIGVxdWFsczogXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHNcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoZW46IHtcbiAgICAgICAgICAgIGVmZmVjdDogXCJhdWRpdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHByb3BzLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ubmFtZSkudG9CZShcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmVxdWlyZSBwb2xpY3lSdWxlIHRvIGJlIHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzOiBhbnkgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgIH07XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsIHByb3BzKTtcbiAgICAgIH0pLnRvVGhyb3coXCJSZXF1aXJlZCBwcm9wZXJ0eSAncG9saWN5UnVsZScgaXMgbWlzc2luZ1wiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJGcmFtZXdvcmsgSW50ZWdyYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJlc29sdmUgbGF0ZXN0IEFQSSB2ZXJzaW9uIGF1dG9tYXRpY2FsbHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMS0wNi0wMVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLmxhdGVzdFZlcnNpb24oKSkudG9CZShcIjIwMjEtMDYtMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IGFsbCByZWdpc3RlcmVkIEFQSSB2ZXJzaW9uc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzdXBwb3J0ZWRWZXJzaW9ucyA9IHBvbGljeURlZmluaXRpb24uc3VwcG9ydGVkVmVyc2lvbnMoKTtcbiAgICAgIGV4cGVjdChzdXBwb3J0ZWRWZXJzaW9ucykudG9Db250YWluKFwiMjAyMS0wNi0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHZhbGlkYXRlIHZlcnNpb24gc3VwcG9ydFwiLCAoKSA9PiB7XG4gICAgICAvLyBWYWxpZCB2ZXJzaW9uXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJWYWxpZFZlcnNpb25cIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjEtMDYtMDFcIixcbiAgICAgICAgfSk7XG4gICAgICB9KS5ub3QudG9UaHJvdygpO1xuXG4gICAgICAvLyBJbnZhbGlkIHZlcnNpb25cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIkludmFsaWRWZXJzaW9uXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTAxLTAxXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdyhcIlVuc3VwcG9ydGVkIEFQSSB2ZXJzaW9uICcyMDIyLTAxLTAxJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGxvYWQgY29ycmVjdCBzY2hlbWEgZm9yIHJlc29sdmVkIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgIGFwaVZlcnNpb246IFwiMjAyMS0wNi0wMVwiLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24uc2NoZW1hKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24uc2NoZW1hLnJlc291cmNlVHlwZSkudG9CZShQT0xJQ1lfREVGSU5JVElPTl9UWVBFKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnNjaGVtYS52ZXJzaW9uKS50b0JlKFwiMjAyMS0wNi0wMVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnNjaGVtYS5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbG9hZCB2ZXJzaW9uIGNvbmZpZ3VyYXRpb24gY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnZlcnNpb25Db25maWcpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi52ZXJzaW9uQ29uZmlnLnZlcnNpb24pLnRvQmUoXCIyMDIxLTA2LTAxXCIpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24udmVyc2lvbkNvbmZpZy5zdXBwb3J0TGV2ZWwpLnRvQmUoXG4gICAgICAgIFZlcnNpb25TdXBwb3J0TGV2ZWwuQUNUSVZFLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJQcm9wZXJ0eSBWYWxpZGF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCB2YWxpZGF0ZSBwcm9wZXJ0aWVzIHdoZW4gdmFsaWRhdGlvbiBpcyBlbmFibGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzOiBQb2xpY3lEZWZpbml0aW9uUHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgIGlmOiB7XG4gICAgICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXG4gICAgICAgICAgICBlcXVhbHM6IFwiTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgICBlZmZlY3Q6IFwiYXVkaXRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiVGVzdFBvbGljeURlZmluaXRpb25cIiwgcHJvcHMpO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgdmFsaWRhdGlvbiByZXN1bHRzIGZvciB2YWxpZCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidmFsaWQtcG9saWN5XCIsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IFwiVmFsaWQgUG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnZhbGlkYXRpb25SZXN1bHQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi52YWxpZGF0aW9uUmVzdWx0IS52YWxpZCkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnZhbGlkYXRpb25SZXN1bHQhLmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc2tpcCB2YWxpZGF0aW9uIHdoZW4gZGlzYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgIGVuYWJsZVZhbGlkYXRpb246IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiTWlncmF0aW9uIEFuYWx5c2lzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBza2lwIG1pZ3JhdGlvbiBhbmFseXNpcyBmb3Igc2luZ2xlIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgIGFwaVZlcnNpb246IFwiMjAyMS0wNi0wMVwiLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gU2luY2UgdGhlcmUncyBvbmx5IG9uZSB2ZXJzaW9uLCBtaWdyYXRpb24gYW5hbHlzaXMgc2hvdWxkIGJlIHNraXBwZWRcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc2tpcCBtaWdyYXRpb24gYW5hbHlzaXMgd2hlbiBkaXNhYmxlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgZW5hYmxlTWlncmF0aW9uQW5hbHlzaXM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ubWlncmF0aW9uQW5hbHlzaXMpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJSZXNvdXJjZSBDcmVhdGlvbiBhbmQgQm9keVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGNvcnJlY3QgcmVzb3VyY2UgYm9keSB3aXRoIG1pbmltYWwgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgICAgZmllbGQ6IFwidGFnc1snRW52aXJvbm1lbnQnXVwiLFxuICAgICAgICAgICAgICBleGlzdHM6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgICAgIGVmZmVjdDogXCJkZW55XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbikudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLnBvbGljeVJ1bGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgY29ycmVjdCByZXNvdXJjZSBib2R5IHdpdGggYWxsIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlRlc3QgUG9saWN5XCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiQSB0ZXN0IHBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVR5cGU6IFwiQ3VzdG9tXCIsXG4gICAgICAgICAgbW9kZTogXCJJbmRleGVkXCIsXG4gICAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgICAgZmllbGQ6IFwibG9jYXRpb25cIixcbiAgICAgICAgICAgICAgbm90SW46IFtcImVhc3R1c1wiLCBcIndlc3R1c1wiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgICAgIGVmZmVjdDogXCJkZW55XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgYWxsb3dlZExvY2F0aW9uczoge1xuICAgICAgICAgICAgICB0eXBlOiBcIkFycmF5XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiBcIkNvbXBsaWFuY2VcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5kaXNwbGF5TmFtZSkudG9CZShcIlRlc3QgUG9saWN5XCIpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5VHlwZSkudG9CZShcIkN1c3RvbVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLm1vZGUpLnRvQmUoXCJJbmRleGVkXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3ktb3V0cHV0c1wiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24uaWRPdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RmLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5uYW1lT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlB1YmxpYyBNZXRob2RzIGFuZCBQcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICBsZXQgcG9saWN5RGVmaW5pdGlvbjogUG9saWN5RGVmaW5pdGlvbjtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUZXN0IFBvbGljeVwiLFxuICAgICAgICBwb2xpY3lUeXBlOiBcIkN1c3RvbVwiLFxuICAgICAgICBtb2RlOiBcIkFsbFwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgICAgIGVxdWFsczogXCJNaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXNcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoZW46IHtcbiAgICAgICAgICAgIGVmZmVjdDogXCJhdWRpdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgY29ycmVjdCBpZCBmb3JtYXRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24uaWQpLnRvTWF0Y2goL15cXCRcXHsuKlxcLmlkXFx9JC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSByZXNvdXJjZUlkIHByb3BlcnR5IG1hdGNoaW5nIGlkXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnJlc291cmNlSWQpLnRvQmUocG9saWN5RGVmaW5pdGlvbi5pZCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gY29ycmVjdCBwb2xpY3lUeXBlXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnBvbGljeVR5cGUpLnRvQmUoXCJDdXN0b21cIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gY29ycmVjdCBwb2xpY3lNb2RlXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnBvbGljeU1vZGUpLnRvQmUoXCJBbGxcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB1c2UgZGVmYXVsdCBwb2xpY3lUeXBlIHdoZW4gbm90IHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQb2xpY3kgPSBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJEZWZhdWx0VHlwZVBvbGljeVwiLCB7XG4gICAgICAgIG5hbWU6IFwiZGVmYXVsdC1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGRlZmF1bHRQb2xpY3kucG9saWN5VHlwZSkudG9CZShcIkN1c3RvbVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHVzZSBkZWZhdWx0IG1vZGUgd2hlbiBub3QgcHJvdmlkZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFBvbGljeSA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIkRlZmF1bHRNb2RlUG9saWN5XCIsIHtcbiAgICAgICAgbmFtZTogXCJkZWZhdWx0LXBvbGljeVwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoZGVmYXVsdFBvbGljeS5wb2xpY3lNb2RlKS50b0JlKFwiQWxsXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIklnbm9yZSBDaGFuZ2VzIENvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGFwcGx5IGlnbm9yZSBjaGFuZ2VzIGxpZmVjeWNsZSBydWxlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIklnbm9yZUNoYW5nZXNQb2xpY3lcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXCJtZXRhZGF0YVwiLCBcImRlc2NyaXB0aW9uXCJdLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24pLnRvQmVJbnN0YW5jZU9mKFBvbGljeURlZmluaXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIGVtcHR5IGlnbm9yZSBjaGFuZ2VzIGFycmF5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiRW1wdHlJZ25vcmVQb2xpY3lcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlSW5zdGFuY2VPZihQb2xpY3lEZWZpbml0aW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJQb2xpY3kgUnVsZSBWYWxpZGF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBhY2NlcHQgY29tcGxleCBwb2xpY3kgcnVsZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgY29tcGxleFJ1bGUgPSB7XG4gICAgICAgIGlmOiB7XG4gICAgICAgICAgYWxsT2Y6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6IFwidHlwZVwiLFxuICAgICAgICAgICAgICBlcXVhbHM6IFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHMvZW5hYmxlSHR0cHNUcmFmZmljT25seVwiLFxuICAgICAgICAgICAgICBub3RFcXVhbHM6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgZWZmZWN0OiBcImRlbnlcIixcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiQ29tcGxleFJ1bGVQb2xpY3lcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY29tcGxleC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiBjb21wbGV4UnVsZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5UnVsZSkudG9FcXVhbChjb21wbGV4UnVsZSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBhY2NlcHQgcG9saWN5IHJ1bGVzIHdpdGggcGFyYW1ldGVyc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlBhcmFtZXRlcml6ZWRQb2xpY3lcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicGFyYW1ldGVyaXplZC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgICBpZjoge1xuICAgICAgICAgICAgICBmaWVsZDogXCJbY29uY2F0KCd0YWdzWycsIHBhcmFtZXRlcnMoJ3RhZ05hbWUnKSwgJ10nKV1cIixcbiAgICAgICAgICAgICAgZXhpc3RzOiBcImZhbHNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhlbjoge1xuICAgICAgICAgICAgICBlZmZlY3Q6IFwiW3BhcmFtZXRlcnMoJ2VmZmVjdCcpXVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIHRhZ05hbWU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJUYWcgTmFtZVwiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIHRhZyB0byBjaGVja1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVmZmVjdDoge1xuICAgICAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJhdWRpdFwiLCBcImRlbnlcIl0sXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhdWRpdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5wYXJhbWV0ZXJzKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkVycm9yIEhhbmRsaW5nXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYW5kbGUgaW52YWxpZCBBUEkgdmVyc2lvbnMgZ3JhY2VmdWxseVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJJbnZhbGlkQVBJXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgYXBpVmVyc2lvbjogXCJpbnZhbGlkLXZlcnNpb25cIixcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KFwiVW5zdXBwb3J0ZWQgQVBJIHZlcnNpb24gJ2ludmFsaWQtdmVyc2lvbidcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgdmFsaWRhdGlvbiBlcnJvcnMgd2hlbiB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiVmFsaWRhdGlvbkVycm9yXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogdW5kZWZpbmVkIGFzIGFueSwgLy8gTWlzc2luZyByZXF1aXJlZCBwb2xpY3lSdWxlXG4gICAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KFwiUmVxdWlyZWQgcHJvcGVydHkgJ3BvbGljeVJ1bGUnIGlzIG1pc3NpbmdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgc2NoZW1hIHJlZ2lzdHJhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJTY2hlbWFUZXN0XCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJKU0lJIENvbXBsaWFuY2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGhhdmUgSlNJSS1jb21wbGlhbnQgY29uc3RydWN0b3JcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiSnNpaVRlc3RcIiwge1xuICAgICAgICAgIG5hbWU6IFwianNpaS10ZXN0XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgSlNJSS1jb21wbGlhbnQgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiSnNpaVByb3BzXCIsIHtcbiAgICAgICAgbmFtZTogXCJqc2lpLXByb3BzXCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5pZCkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5uYW1lKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBwb2xpY3lEZWZpbml0aW9uLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5wb2xpY3lUeXBlKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBwb2xpY3lEZWZpbml0aW9uLnBvbGljeU1vZGUpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIEpTSUktY29tcGxpYW50IG1ldGhvZHNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIkpzaWlNZXRob2RzXCIsIHtcbiAgICAgICAgbmFtZTogXCJqc2lpLW1ldGhvZHNcIixcbiAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHR5cGVvZiBwb2xpY3lEZWZpbml0aW9uLmxhdGVzdFZlcnNpb24pLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5zdXBwb3J0ZWRWZXJzaW9ucykudG9CZShcImZ1bmN0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc2VyaWFsaXplIGNvbXBsZXggb2JqZWN0cyBjb3JyZWN0bHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJKc2lpU2VyaWFsaXphdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJqc2lpLXNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgICBpZjogeyBmaWVsZDogXCJsb2NhdGlvblwiLCBlcXVhbHM6IFwiZWFzdHVzXCIgfSxcbiAgICAgICAgICAgIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGVzdFBhcmFtOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocG9saWN5RGVmaW5pdGlvbi52YWxpZGF0aW9uUmVzdWx0KSxcbiAgICAgICkubm90LnRvVGhyb3coKTtcbiAgICAgIGV4cGVjdCgoKSA9PiBKU09OLnN0cmluZ2lmeShwb2xpY3lEZWZpbml0aW9uLnNjaGVtYSkpLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocG9saWN5RGVmaW5pdGlvbi52ZXJzaW9uQ29uZmlnKSxcbiAgICAgICkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJDREsgVGVycmFmb3JtIEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzeW50aGVzaXplIHRvIHZhbGlkIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlN5bnRoVGVzdFwiLCB7XG4gICAgICAgIG5hbWU6IFwic3ludGgtdGVzdFwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgICAgIGVxdWFsczogXCJNaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXNcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoZW46IHtcbiAgICAgICAgICAgIGVmZmVjdDogXCJhdWRpdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9CZURlZmluZWQoKTtcblxuICAgICAgY29uc3Qgc3RhY2tDb25maWcgPSBKU09OLnBhcnNlKHN5bnRoZXNpemVkKTtcbiAgICAgIGV4cGVjdChzdGFja0NvbmZpZy5yZXNvdXJjZSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHdvcmsgaW4gY29tcGxleCBDREsgY29uc3RydWN0c1wiLCAoKSA9PiB7XG4gICAgICBjbGFzcyBDb21wbGV4Q29uc3RydWN0IGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtU3RhY2sge1xuICAgICAgICBjb25zdHJ1Y3RvcihzY29wZTogY2RrdGYuQXBwLCBpZDogc3RyaW5nKSB7XG4gICAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICAgIGNvbnN0IHBvbGljeTEgPSBuZXcgUG9saWN5RGVmaW5pdGlvbih0aGlzLCBcIlBvbGljeTFcIiwge1xuICAgICAgICAgICAgbmFtZTogXCJwb2xpY3ktMVwiLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiRmlyc3QgUG9saWN5XCIsXG4gICAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiYXVkaXRcIiB9IH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBwb2xpY3kyID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJQb2xpY3kyXCIsIHtcbiAgICAgICAgICAgIG5hbWU6IFwicG9saWN5LTJcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlNlY29uZCBQb2xpY3lcIixcbiAgICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIxLTA2LTAxXCIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiUG9saWN5MUlkXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBwb2xpY3kxLmlkLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIlBvbGljeTJJZFwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogcG9saWN5Mi5pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgQ29tcGxleENvbnN0cnVjdChhcHAsIFwiQ29tcGxleFN0YWNrXCIpO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBwb2xpY3kgZGVmaW5pdGlvbnMgaW4gdGhlIHNhbWUgc3RhY2tcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5MSA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlBvbGljeURlZmluaXRpb24xXCIsIHtcbiAgICAgICAgbmFtZTogXCJwb2xpY3ktMVwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiYXVkaXRcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcG9saWN5MiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlBvbGljeURlZmluaXRpb24yXCIsIHtcbiAgICAgICAgbmFtZTogXCJwb2xpY3ktMlwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIxLTA2LTAxXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHBvbGljeTEucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMS0wNi0wMVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3kyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjEtMDYtMDFcIik7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUG9saWN5IERlZmluaXRpb24gVHlwZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgQnVpbHRJbiBwb2xpY3kgdHlwZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiQnVpbHRJblBvbGljeVwiLCB7XG4gICAgICAgIG5hbWU6IFwiYnVpbHRpbi1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5VHlwZTogXCJCdWlsdEluXCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJhdWRpdFwiIH0gfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wb2xpY3lUeXBlKS50b0JlKFwiQnVpbHRJblwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgU3RhdGljIHBvbGljeSB0eXBlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJTdGF0aWNQb2xpY3lcIiwge1xuICAgICAgICBuYW1lOiBcInN0YXRpYy1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5VHlwZTogXCJTdGF0aWNcIixcbiAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImF1ZGl0XCIgfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnBvbGljeVR5cGUpLnRvQmUoXCJTdGF0aWNcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IGRpZmZlcmVudCBwb2xpY3kgbW9kZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlZFBvbGljeSA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIkluZGV4ZWRQb2xpY3lcIiwge1xuICAgICAgICBuYW1lOiBcImluZGV4ZWQtcG9saWN5XCIsXG4gICAgICAgIG1vZGU6IFwiSW5kZXhlZFwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiYXVkaXRcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGluZGV4ZWRQb2xpY3kucG9saWN5TW9kZSkudG9CZShcIkluZGV4ZWRcIik7XG5cbiAgICAgIGNvbnN0IHJlc291cmNlUHJvdmlkZXJQb2xpY3kgPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiUmVzb3VyY2VQcm92aWRlclBvbGljeVwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyZXNvdXJjZS1wcm92aWRlci1wb2xpY3lcIixcbiAgICAgICAgICBtb2RlOiBcIk1pY3Jvc29mdC5LZXlWYXVsdC5EYXRhXCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImF1ZGl0XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHJlc291cmNlUHJvdmlkZXJQb2xpY3kucG9saWN5TW9kZSkudG9CZShcIk1pY3Jvc29mdC5LZXlWYXVsdC5EYXRhXCIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
806
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1wb2xpY3lkZWZpbml0aW9uL3Rlc3QvcG9saWN5LWRlZmluaXRpb24uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7QUFFSCxpQ0FBZ0M7QUFDaEMsK0JBQStCO0FBQy9CLGtHQUE2RjtBQUM3RiwyR0FBeUc7QUFDekcsZ0VBR2tDO0FBQ2xDLGdGQUcwQztBQUUxQyxRQUFRLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO0lBQ3pELElBQUksR0FBYyxDQUFDO0lBQ25CLElBQUksS0FBMkIsQ0FBQztJQUNoQyxJQUFJLE9BQTBCLENBQUM7SUFFL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkQsT0FBTyxHQUFHLHVDQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZDLGtEQUFrRDtRQUNsRCxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsb0JBQW9CLENBQzFCLGtEQUFzQixFQUN0QiwwREFBOEIsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsK0JBQStCO1FBQ2pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEdBQUcsRUFBRTtZQUNsRixNQUFNLEtBQUssR0FBMEI7Z0JBQ25DLElBQUksRUFBRSxhQUFhO2dCQUNuQixVQUFVLEVBQUU7b0JBQ1YsRUFBRSxFQUFFO3dCQUNGLEtBQUssRUFBRSxxQkFBcUI7d0JBQzVCLE1BQU0sRUFBRSxP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QUFJLG9DQUFnQixDQUNqRCxLQUFLLEVBQ0wsd0JBQXdCLEVBQ3hCO2dCQUNFLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO2FBQ2xELENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbXByZWhlbnNpdmUgdGVzdHMgZm9yIHRoZSB1bmlmaWVkIFBvbGljeURlZmluaXRpb24gaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIHRlc3Qgc3VpdGUgdmFsaWRhdGVzIHRoZSB1bmlmaWVkIFBvbGljeURlZmluaXRpb24gY2xhc3MgdGhhdCB1c2VzXG4gKiB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmsuIFRlc3RzIGNvdmVyIGF1dG9tYXRpYyB2ZXJzaW9uIHJlc29sdXRpb24sXG4gKiBleHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcsIHNjaGVtYSB2YWxpZGF0aW9uLCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiwgYW5kXG4gKiBwb2xpY3ktc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS5cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IEFwaVZlcnNpb25NYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9hcGktdmVyc2lvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBWZXJzaW9uU3VwcG9ydExldmVsIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtcbiAgUG9saWN5RGVmaW5pdGlvbixcbiAgUG9saWN5RGVmaW5pdGlvblByb3BzLFxufSBmcm9tIFwiLi4vbGliL3BvbGljeS1kZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBBTExfUE9MSUNZX0RFRklOSVRJT05fVkVSU0lPTlMsXG4gIFBPTElDWV9ERUZJTklUSU9OX1RZUEUsXG59IGZyb20gXCIuLi9saWIvcG9saWN5LWRlZmluaXRpb24tc2NoZW1hc1wiO1xuXG5kZXNjcmliZShcIlBvbGljeURlZmluaXRpb24gLSBVbmlmaWVkIEltcGxlbWVudGF0aW9uXCIsICgpID0+IHtcbiAgbGV0IGFwcDogY2RrdGYuQXBwO1xuICBsZXQgc3RhY2s6IGNka3RmLlRlcnJhZm9ybVN0YWNrO1xuICBsZXQgbWFuYWdlcjogQXBpVmVyc2lvbk1hbmFnZXI7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBzdGFjayA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICAgIG1hbmFnZXIgPSBBcGlWZXJzaW9uTWFuYWdlci5pbnN0YW5jZSgpO1xuXG4gICAgLy8gRW5zdXJlIFBvbGljeSBEZWZpbml0aW9uIHNjaGVtYXMgYXJlIHJlZ2lzdGVyZWRcbiAgICB0cnkge1xuICAgICAgbWFuYWdlci5yZWdpc3RlclJlc291cmNlVHlwZShcbiAgICAgICAgUE9MSUNZX0RFRklOSVRJT05fVFlQRSxcbiAgICAgICAgQUxMX1BPTElDWV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWdub3JlIGlmIGFscmVhZHkgcmVnaXN0ZXJlZFxuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJDb25zdHJ1Y3RvciBhbmQgQmFzaWMgUHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHBvbGljeSBkZWZpbml0aW9uIHdpdGggYXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeURlZmluaXRpb25Qcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgIGZpZWxkOiBcInRhZ3NbJ0Vudmlyb25tZW50J11cIixcbiAgICAgICAgICAgIGV4aXN0czogXCJmYWxzZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhlbjoge1xuICAgICAgICAgICAgZWZmZWN0OiBcImRlbnlcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICBwcm9wcyxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlSW5zdGFuY2VPZihQb2xpY3lEZWZpbml0aW9uKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjEtMDYtMDFcIik7IC8vIExhdGVzdCB2ZXJzaW9uXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcykudG9CZShwcm9wcyk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5uYW1lKS50b0JlKFwidGVzdC1wb2xpY3lcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgcG9saWN5IGRlZmluaXRpb24gd2l0aCBleHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmdcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeURlZmluaXRpb25Qcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeS1waW5uZWRcIixcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIxLTA2LTAxXCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHtcbiAgICAgICAgICBpZjoge1xuICAgICAgICAgICAgZmllbGQ6IFwidHlwZVwiLFxuICAgICAgICAgICAgZXF1YWxzOiBcIk1pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhlbjoge1xuICAgICAgICAgICAgZWZmZWN0OiBcImF1ZGl0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAgcHJvcHMsXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIxLTA2LTAxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHBvbGljeSBkZWZpbml0aW9uIHdpdGggYWxsIG9wdGlvbmFsIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeURlZmluaXRpb25Qcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeS1mdWxsXCIsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIlRlc3QgUG9saWN5IERlZmluaXRpb25cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQSB0ZXN0IHBvbGljeSBkZWZpbml0aW9uIGZvciB1bml0IHRlc3RpbmdcIixcbiAgICAgICAgcG9saWN5VHlwZTogXCJDdXN0b21cIixcbiAgICAgICAgbW9kZTogXCJBbGxcIixcbiAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgIGlmOiB7XG4gICAgICAgICAgICBmaWVsZDogXCJsb2NhdGlvblwiLFxuICAgICAgICAgICAgbm90SW46IFtcImVhc3R1c1wiLCBcIndlc3R1c1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoZW46IHtcbiAgICAgICAgICAgIGVmZmVjdDogXCJkZW55XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRMb2NhdGlvbnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiQXJyYXlcIixcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIkFsbG93ZWQgbG9jYXRpb25zXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBsaXN0IG9mIGFsbG93ZWQgbG9jYXRpb25zIGZvciByZXNvdXJjZXNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBjYXRlZ29yeTogXCJHZW5lcmFsXCIsXG4gICAgICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXCJtZXRhZGF0YVwiXSxcbiAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgZW5hYmxlTWlncmF0aW9uQW5hbHlzaXM6IHRydWUsXG4gICAgICAgIGVuYWJsZVRyYW5zZm9ybWF0aW9uOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICBwcm9wcyxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLmRpc3BsYXlOYW1lKS50b0JlKFwiVGVzdCBQb2xpY3kgRGVmaW5pdGlvblwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLmRlc2NyaXB0aW9uKS50b0JlKFxuICAgICAgICBcIkEgdGVzdCBwb2xpY3kgZGVmaW5pdGlvbiBmb3IgdW5pdCB0ZXN0aW5nXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5VHlwZSkudG9CZShcIkN1c3RvbVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLm1vZGUpLnRvQmUoXCJBbGxcIik7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5wYXJhbWV0ZXJzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMubWV0YWRhdGEpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB1c2UgZGVmYXVsdCBuYW1lIHdoZW4gbmFtZSBpcyBub3QgcHJvdmlkZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeURlZmluaXRpb25Qcm9wcyA9IHtcbiAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgIGlmOiB7XG4gICAgICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXG4gICAgICAgICAgICBlcXVhbHM6IFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgICBlZmZlY3Q6IFwiYXVkaXRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICBwcm9wcyxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLm5hbWUpLnRvQmUoXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHJlcXVpcmUgcG9saWN5UnVsZSB0byBiZSBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogYW55ID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICB9O1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLCBwcm9wcyk7XG4gICAgICB9KS50b1Rocm93KFwiUmVxdWlyZWQgcHJvcGVydHkgJ3BvbGljeVJ1bGUnIGlzIG1pc3NpbmdcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiRnJhbWV3b3JrIEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZXNvbHZlIGxhdGVzdCBBUEkgdmVyc2lvbiBhdXRvbWF0aWNhbGx5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjEtMDYtMDFcIik7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5sYXRlc3RWZXJzaW9uKCkpLnRvQmUoXCIyMDIxLTA2LTAxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBhbGwgcmVnaXN0ZXJlZCBBUEkgdmVyc2lvbnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnMgPSBwb2xpY3lEZWZpbml0aW9uLnN1cHBvcnRlZFZlcnNpb25zKCk7XG4gICAgICBleHBlY3Qoc3VwcG9ydGVkVmVyc2lvbnMpLnRvQ29udGFpbihcIjIwMjEtMDYtMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB2YWxpZGF0ZSB2ZXJzaW9uIHN1cHBvcnRcIiwgKCkgPT4ge1xuICAgICAgLy8gVmFsaWQgdmVyc2lvblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiVmFsaWRWZXJzaW9uXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIxLTA2LTAxXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcblxuICAgICAgLy8gSW52YWxpZCB2ZXJzaW9uXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJJbnZhbGlkVmVyc2lvblwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgIGFwaVZlcnNpb246IFwiMjAyMi0wMS0wMVwiLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coXCJVbnN1cHBvcnRlZCBBUEkgdmVyc2lvbiAnMjAyMi0wMS0wMSdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBsb2FkIGNvcnJlY3Qgc2NoZW1hIGZvciByZXNvbHZlZCB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjEtMDYtMDFcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnNjaGVtYSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnNjaGVtYS5yZXNvdXJjZVR5cGUpLnRvQmUoUE9MSUNZX0RFRklOSVRJT05fVFlQRSk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5zY2hlbWEudmVyc2lvbikudG9CZShcIjIwMjEtMDYtMDFcIik7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5zY2hlbWEucHJvcGVydGllcykudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGxvYWQgdmVyc2lvbiBjb25maWd1cmF0aW9uIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi52ZXJzaW9uQ29uZmlnKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24udmVyc2lvbkNvbmZpZy52ZXJzaW9uKS50b0JlKFwiMjAyMS0wNi0wMVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnZlcnNpb25Db25maWcuc3VwcG9ydExldmVsKS50b0JlKFxuICAgICAgICBWZXJzaW9uU3VwcG9ydExldmVsLkFDVElWRSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUHJvcGVydHkgVmFsaWRhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgcHJvcGVydGllcyB3aGVuIHZhbGlkYXRpb24gaXMgZW5hYmxlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHtcbiAgICAgICAgICBpZjoge1xuICAgICAgICAgICAgZmllbGQ6IFwidHlwZVwiLFxuICAgICAgICAgICAgZXF1YWxzOiBcIk1pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhlbjoge1xuICAgICAgICAgICAgZWZmZWN0OiBcImF1ZGl0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsIHByb3BzKTtcbiAgICAgIH0pLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIHZhbGlkYXRpb24gcmVzdWx0cyBmb3IgdmFsaWQgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInZhbGlkLXBvbGljeVwiLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlZhbGlkIFBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgIGVuYWJsZVZhbGlkYXRpb246IHRydWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi52YWxpZGF0aW9uUmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24udmFsaWRhdGlvblJlc3VsdCEudmFsaWQpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi52YWxpZGF0aW9uUmVzdWx0IS5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHNraXAgdmFsaWRhdGlvbiB3aGVuIGRpc2FibGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIk1pZ3JhdGlvbiBBbmFseXNpc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc2tpcCBtaWdyYXRpb24gYW5hbHlzaXMgZm9yIHNpbmdsZSB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjEtMDYtMDFcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFNpbmNlIHRoZXJlJ3Mgb25seSBvbmUgdmVyc2lvbiwgbWlncmF0aW9uIGFuYWx5c2lzIHNob3VsZCBiZSBza2lwcGVkXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbikudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHNraXAgbWlncmF0aW9uIGFuYWx5c2lzIHdoZW4gZGlzYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgIGVuYWJsZU1pZ3JhdGlvbkFuYWx5c2lzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLm1pZ3JhdGlvbkFuYWx5c2lzKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUmVzb3VyY2UgQ3JlYXRpb24gYW5kIEJvZHlcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBjb3JyZWN0IHJlc291cmNlIGJvZHkgd2l0aCBtaW5pbWFsIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHtcbiAgICAgICAgICAgIGlmOiB7XG4gICAgICAgICAgICAgIGZpZWxkOiBcInRhZ3NbJ0Vudmlyb25tZW50J11cIixcbiAgICAgICAgICAgICAgZXhpc3RzOiBcImZhbHNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhlbjoge1xuICAgICAgICAgICAgICBlZmZlY3Q6IFwiZGVueVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5wb2xpY3lSdWxlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGNvcnJlY3QgcmVzb3VyY2UgYm9keSB3aXRoIGFsbCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdFBvbGljeURlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBkaXNwbGF5TmFtZTogXCJUZXN0IFBvbGljeVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkEgdGVzdCBwb2xpY3lcIixcbiAgICAgICAgICBwb2xpY3lUeXBlOiBcIkN1c3RvbVwiLFxuICAgICAgICAgIG1vZGU6IFwiSW5kZXhlZFwiLFxuICAgICAgICAgIHBvbGljeVJ1bGU6IHtcbiAgICAgICAgICAgIGlmOiB7XG4gICAgICAgICAgICAgIGZpZWxkOiBcImxvY2F0aW9uXCIsXG4gICAgICAgICAgICAgIG5vdEluOiBbXCJlYXN0dXNcIiwgXCJ3ZXN0dXNcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhlbjoge1xuICAgICAgICAgICAgICBlZmZlY3Q6IFwiZGVueVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGFsbG93ZWRMb2NhdGlvbnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJBcnJheVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBjYXRlZ29yeTogXCJDb21wbGlhbmNlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMuZGlzcGxheU5hbWUpLnRvQmUoXCJUZXN0IFBvbGljeVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLnBvbGljeVR5cGUpLnRvQmUoXCJDdXN0b21cIik7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5tb2RlKS50b0JlKFwiSW5kZXhlZFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RQb2xpY3lEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5LW91dHB1dHNcIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLmlkT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ubmFtZU91dHB1dCkudG9CZUluc3RhbmNlT2YoY2RrdGYuVGVycmFmb3JtT3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJQdWJsaWMgTWV0aG9kcyBhbmQgUHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgbGV0IHBvbGljeURlZmluaXRpb246IFBvbGljeURlZmluaXRpb247XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJUZXN0UG9saWN5RGVmaW5pdGlvblwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1wb2xpY3lcIixcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVGVzdCBQb2xpY3lcIixcbiAgICAgICAgcG9saWN5VHlwZTogXCJDdXN0b21cIixcbiAgICAgICAgbW9kZTogXCJBbGxcIixcbiAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgIGlmOiB7XG4gICAgICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXG4gICAgICAgICAgICBlcXVhbHM6IFwiTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgICBlZmZlY3Q6IFwiYXVkaXRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIGNvcnJlY3QgaWQgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLmlkKS50b01hdGNoKC9eXFwkXFx7LipcXC5pZFxcfSQvKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgcmVzb3VyY2VJZCBwcm9wZXJ0eSBtYXRjaGluZyBpZFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5yZXNvdXJjZUlkKS50b0JlKHBvbGljeURlZmluaXRpb24uaWQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGNvcnJlY3QgcG9saWN5VHlwZVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wb2xpY3lUeXBlKS50b0JlKFwiQ3VzdG9tXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGNvcnJlY3QgcG9saWN5TW9kZVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wb2xpY3lNb2RlKS50b0JlKFwiQWxsXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdXNlIGRlZmF1bHQgcG9saWN5VHlwZSB3aGVuIG5vdCBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0UG9saWN5ID0gbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiRGVmYXVsdFR5cGVQb2xpY3lcIiwge1xuICAgICAgICBuYW1lOiBcImRlZmF1bHQtcG9saWN5XCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChkZWZhdWx0UG9saWN5LnBvbGljeVR5cGUpLnRvQmUoXCJDdXN0b21cIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB1c2UgZGVmYXVsdCBtb2RlIHdoZW4gbm90IHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQb2xpY3kgPSBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJEZWZhdWx0TW9kZVBvbGljeVwiLCB7XG4gICAgICAgIG5hbWU6IFwiZGVmYXVsdC1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGRlZmF1bHRQb2xpY3kucG9saWN5TW9kZSkudG9CZShcIkFsbFwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJJZ25vcmUgQ2hhbmdlcyBDb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBhcHBseSBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJJZ25vcmVDaGFuZ2VzUG9saWN5XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgaWdub3JlQ2hhbmdlczogW1wibWV0YWRhdGFcIiwgXCJkZXNjcmlwdGlvblwiXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlSW5zdGFuY2VPZihQb2xpY3lEZWZpbml0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBlbXB0eSBpZ25vcmUgY2hhbmdlcyBhcnJheVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIkVtcHR5SWdub3JlUG9saWN5XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgaWdub3JlQ2hhbmdlczogW10sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbikudG9CZUluc3RhbmNlT2YoUG9saWN5RGVmaW5pdGlvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUG9saWN5IFJ1bGUgVmFsaWRhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgYWNjZXB0IGNvbXBsZXggcG9saWN5IHJ1bGVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhSdWxlID0ge1xuICAgICAgICBpZjoge1xuICAgICAgICAgIGFsbE9mOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgICAgICAgZXF1YWxzOiBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50c1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6IFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2VuYWJsZUh0dHBzVHJhZmZpY09ubHlcIixcbiAgICAgICAgICAgICAgbm90RXF1YWxzOiBcInRydWVcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhlbjoge1xuICAgICAgICAgIGVmZmVjdDogXCJkZW55XCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIkNvbXBsZXhSdWxlUG9saWN5XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNvbXBsZXgtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogY29tcGxleFJ1bGUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbikudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLnBvbGljeVJ1bGUpLnRvRXF1YWwoY29tcGxleFJ1bGUpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYWNjZXB0IHBvbGljeSBydWxlcyB3aXRoIHBhcmFtZXRlcnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJQYXJhbWV0ZXJpemVkUG9saWN5XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInBhcmFtZXRlcml6ZWQtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgICAgZmllbGQ6IFwiW2NvbmNhdCgndGFnc1snLCBwYXJhbWV0ZXJzKCd0YWdOYW1lJyksICddJyldXCIsXG4gICAgICAgICAgICAgIGV4aXN0czogXCJmYWxzZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoZW46IHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBcIltwYXJhbWV0ZXJzKCdlZmZlY3QnKV1cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0YWdOYW1lOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiVGFnIE5hbWVcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJOYW1lIG9mIHRoZSB0YWcgdG8gY2hlY2tcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlZmZlY3Q6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiYXVkaXRcIiwgXCJkZW55XCJdLFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXVkaXRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMucGFyYW1ldGVycykudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHByZXNlcnZlIGNvbXBsZXggYWxsT2YgY29uZGl0aW9ucyB3aXRoIG11bHRpcGxlIGZpZWxkIGNvbXBhcmlzb25zXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhSdWxlID0ge1xuICAgICAgICBpZjoge1xuICAgICAgICAgIGFsbE9mOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgICAgICAgZXF1YWxzOiBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50c1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6XG4gICAgICAgICAgICAgICAgXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHMvbmV0d29ya0FjbHMuZGVmYXVsdEFjdGlvblwiLFxuICAgICAgICAgICAgICBub3RFcXVhbHM6IFwiRGVueVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgZWZmZWN0OiBcImF1ZGl0XCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiQ29tcGxleEFsbE9mXCIsIHtcbiAgICAgICAgbmFtZTogXCJjb21wbGV4LWFsbG9mLXBvbGljeVwiLFxuICAgICAgICBkaXNwbGF5TmFtZTogXCJDb21wbGV4IEFsbE9mIFBvbGljeVwiLFxuICAgICAgICBwb2xpY3lSdWxlOiBjb21wbGV4UnVsZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbikudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLnBvbGljeVJ1bGUpLnRvRXF1YWwoY29tcGxleFJ1bGUpO1xuXG4gICAgICAvLyBTeW50aGVzaXplIGFuZCB2ZXJpZnkgdGhlIHN0cnVjdHVyZSBpcyBwcmVzZXJ2ZWRcbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBjb25zdCBzdGFja0NvbmZpZyA9IEpTT04ucGFyc2Uoc3ludGhlc2l6ZWQpO1xuICAgICAgY29uc3QgYXphcGlSZXNvdXJjZSA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgIHN0YWNrQ29uZmlnLnJlc291cmNlLmF6YXBpX3Jlc291cmNlLFxuICAgICAgKVswXSBhcyBhbnk7XG5cbiAgICAgIC8vIFRoZSBib2R5IGlzIGpzb25lbmNvZGUoKSB3cmFwcGVkLCBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBhY3R1YWwgcG9saWN5IHJ1bGUgZnJvbSBwcm9wc1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5UnVsZS5pZi5hbGxPZikudG9IYXZlTGVuZ3RoKDIpO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5UnVsZS5pZi5hbGxPZlswXS5maWVsZCkudG9CZShcInR5cGVcIik7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5wb2xpY3lSdWxlLmlmLmFsbE9mWzBdLmVxdWFscykudG9CZShcbiAgICAgICAgXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHNcIixcbiAgICAgICk7XG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5wb2xpY3lSdWxlLmlmLmFsbE9mWzFdLmZpZWxkKS50b0JlKFxuICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9uZXR3b3JrQWNscy5kZWZhdWx0QWN0aW9uXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5UnVsZS5pZi5hbGxPZlsxXS5ub3RFcXVhbHMpLnRvQmUoXG4gICAgICAgIFwiRGVueVwiLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnByb3BzLnBvbGljeVJ1bGUudGhlbi5lZmZlY3QpLnRvQmUoXCJhdWRpdFwiKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBzeW50aGVzaXplZCBjb25maWcgaGFzIHRoZSBib2R5IHByb3BlcnR5IHNldFxuICAgICAgZXhwZWN0KGF6YXBpUmVzb3VyY2UuYm9keSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHByZXNlcnZlIEF6dXJlIFBvbGljeSBleHByZXNzaW9ucyB3aXRob3V0IGNvbnZlcnRpbmcgdGhlbVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBpZjoge1xuICAgICAgICAgIGZpZWxkOiBcImxvY2F0aW9uXCIsXG4gICAgICAgICAgbm90SW46IFwiW3BhcmFtZXRlcnMoJ2FsbG93ZWRMb2NhdGlvbnMnKV1cIixcbiAgICAgICAgfSxcbiAgICAgICAgdGhlbjoge1xuICAgICAgICAgIGVmZmVjdDogXCJbcGFyYW1ldGVycygnZWZmZWN0JyldXCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJBenVyZVBvbGljeUV4cHJlc3Npb25zXCIsIHtcbiAgICAgICAgbmFtZTogXCJhenVyZS1leHByZXNzaW9ucy1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5UnVsZTogcnVsZSxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRMb2NhdGlvbnM6IHsgdHlwZTogXCJBcnJheVwiIH0sXG4gICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwiU3RyaW5nXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3Rpbmcuc3ludGgoc3RhY2spO1xuICAgICAgY29uc3Qgc3RhY2tDb25maWcgPSBKU09OLnBhcnNlKHN5bnRoZXNpemVkKTtcbiAgICAgIGNvbnN0IGF6YXBpUmVzb3VyY2UgPSBPYmplY3QudmFsdWVzKFxuICAgICAgICBzdGFja0NvbmZpZy5yZXNvdXJjZS5hemFwaV9yZXNvdXJjZSxcbiAgICAgIClbMF0gYXMgYW55O1xuXG4gICAgICAvLyBWZXJpZnkgQXp1cmUgUG9saWN5IGV4cHJlc3Npb25zIGFyZSBwcmVzZXJ2ZWQgaW4gdGhlIGNvbnN0cnVjdCdzIHByb3BzXG4gICAgICBleHBlY3QocnVsZS5pZi5ub3RJbikudG9CZShcIltwYXJhbWV0ZXJzKCdhbGxvd2VkTG9jYXRpb25zJyldXCIpO1xuICAgICAgZXhwZWN0KHJ1bGUudGhlbi5lZmZlY3QpLnRvQmUoXCJbcGFyYW1ldGVycygnZWZmZWN0JyldXCIpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHN5bnRoZXNpemVkIGNvbmZpZyBoYXMgdGhlIGJvZHkgcHJvcGVydHkgc2V0XG4gICAgICBleHBlY3QoYXphcGlSZXNvdXJjZS5ib2R5KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcHJlc2VydmUgRGVwbG95SWZOb3RFeGlzdHMgcG9saWN5IHdpdGggQVJNIHRlbXBsYXRlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhSdWxlID0ge1xuICAgICAgICBpZjoge1xuICAgICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgICBlcXVhbHM6IFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHRoZW46IHtcbiAgICAgICAgICBlZmZlY3Q6IFwiRGVwbG95SWZOb3RFeGlzdHNcIixcbiAgICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL25ldHdvcmtNYW5hZ2Vycy9uZXR3b3JrR3JvdXBzL3N0YXRpY01lbWJlcnNcIixcbiAgICAgICAgICAgIGRlcGxveW1lbnRTY29wZTogXCJzdWJzY3JpcHRpb25cIixcbiAgICAgICAgICAgIGV4aXN0ZW5jZVNjb3BlOiBcInN1YnNjcmlwdGlvblwiLFxuICAgICAgICAgICAgcm9sZURlZmluaXRpb25JZHM6IFtcbiAgICAgICAgICAgICAgXCIvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3JvbGVEZWZpbml0aW9ucy9iMjQ5ODhhYy02MTgwLTQyYTAtYWI4OC0yMGY3MzgyZGQyNGNcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkZXBsb3ltZW50OiB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBcIltmaWVsZCgnbG9jYXRpb24nKV1cIixcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIG1vZGU6IFwiaW5jcmVtZW50YWxcIixcbiAgICAgICAgICAgICAgICByZXNvdXJjZUdyb3VwOiBcIlt2YXJpYWJsZXMoJ2F2bm1SZXNvdXJjZUdyb3VwJyldXCIsXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IFwiW3BhcmFtZXRlcnMoJ2F2bm1TdWJzY3JpcHRpb25JZCcpXVwiLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB7XG4gICAgICAgICAgICAgICAgICAkc2NoZW1hOlxuICAgICAgICAgICAgICAgICAgICBcImh0dHBzOi8vc2NoZW1hLm1hbmFnZW1lbnQuYXp1cmUuY29tL3NjaGVtYXMvMjAxOS0wNC0wMS9kZXBsb3ltZW50VGVtcGxhdGUuanNvbiNcIixcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRWZXJzaW9uOiBcIjEuMC4wLjBcIixcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdm5ldElkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljTWVtYmVyTmFtZTogXCJbZ3VpZChwYXJhbWV0ZXJzKCd2bmV0SWQnKSldXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL25ldHdvcmtNYW5hZ2Vycy9uZXR3b3JrR3JvdXBzL3N0YXRpY01lbWJlcnNcIixcbiAgICAgICAgICAgICAgICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjMtMDQtMDFcIixcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIltjb25jYXQocGFyYW1ldGVycygnYXZubUlkJyksICcvJywgdmFyaWFibGVzKCdzdGF0aWNNZW1iZXJOYW1lJykpXVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlSWQ6IFwiW3BhcmFtZXRlcnMoJ3ZuZXRJZCcpXVwiLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgb3V0cHV0czoge1xuICAgICAgICAgICAgICAgICAgICBtZW1iZXJJZDoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgICBcIltyZXNvdXJjZUlkKCdNaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvbmV0d29ya0dyb3Vwcy9zdGF0aWNNZW1iZXJzJywgdmFyaWFibGVzKCdzdGF0aWNNZW1iZXJOYW1lJykpXVwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgIHZuZXRJZDoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJbZmllbGQoJ2lkJyldXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIkRlcGxveUlmTm90RXhpc3RzUG9saWN5XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRlcGxveS1pZi1ub3QtZXhpc3RzLXBvbGljeVwiLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIkRlcGxveSBJZiBOb3QgRXhpc3RzIHdpdGggQVJNIFRlbXBsYXRlXCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogY29tcGxleFJ1bGUsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgYXZubVN1YnNjcmlwdGlvbklkOiB7IHR5cGU6IFwiU3RyaW5nXCIgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHBvbGljeURlZmluaXRpb24pLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBjb25zdCBzdGFja0NvbmZpZyA9IEpTT04ucGFyc2Uoc3ludGhlc2l6ZWQpO1xuICAgICAgY29uc3QgYXphcGlSZXNvdXJjZSA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgIHN0YWNrQ29uZmlnLnJlc291cmNlLmF6YXBpX3Jlc291cmNlLFxuICAgICAgKVswXSBhcyBhbnk7XG5cbiAgICAgIGNvbnN0IGRldGFpbHMgPSBwb2xpY3lEZWZpbml0aW9uLnByb3BzLnBvbGljeVJ1bGUudGhlbi5kZXRhaWxzO1xuXG4gICAgICAvLyBWZXJpZnkgZGVwbG95bWVudCBzdHJ1Y3R1cmUgaXMgcHJlc2VydmVkIChub3QgY29udmVydGVkIHRvIG51bGwpXG4gICAgICBleHBlY3QoZGV0YWlscy5kZXBsb3ltZW50KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGRldGFpbHMuZGVwbG95bWVudC5sb2NhdGlvbikudG9CZShcIltmaWVsZCgnbG9jYXRpb24nKV1cIik7XG4gICAgICBleHBlY3QoZGV0YWlscy5kZXBsb3ltZW50LnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoZGV0YWlscy5kZXBsb3ltZW50LnByb3BlcnRpZXMubW9kZSkudG9CZShcImluY3JlbWVudGFsXCIpO1xuICAgICAgZXhwZWN0KGRldGFpbHMuZGVwbG95bWVudC5wcm9wZXJ0aWVzLnJlc291cmNlR3JvdXApLnRvQmUoXG4gICAgICAgIFwiW3ZhcmlhYmxlcygnYXZubVJlc291cmNlR3JvdXAnKV1cIixcbiAgICAgICk7XG4gICAgICBleHBlY3QoZGV0YWlscy5kZXBsb3ltZW50LnByb3BlcnRpZXMuc3Vic2NyaXB0aW9uSWQpLnRvQmUoXG4gICAgICAgIFwiW3BhcmFtZXRlcnMoJ2F2bm1TdWJzY3JpcHRpb25JZCcpXVwiLFxuICAgICAgKTtcblxuICAgICAgLy8gVmVyaWZ5IEFSTSB0ZW1wbGF0ZSBpcyBmdWxseSBwcmVzZXJ2ZWQgKG5vdCBjb252ZXJ0ZWQgdG8gbnVsbClcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gZGV0YWlscy5kZXBsb3ltZW50LnByb3BlcnRpZXMudGVtcGxhdGU7XG4gICAgICBleHBlY3QodGVtcGxhdGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QodGVtcGxhdGUuJHNjaGVtYSkudG9CZShcbiAgICAgICAgXCJodHRwczovL3NjaGVtYS5tYW5hZ2VtZW50LmF6dXJlLmNvbS9zY2hlbWFzLzIwMTktMDQtMDEvZGVwbG95bWVudFRlbXBsYXRlLmpzb24jXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlLmNvbnRlbnRWZXJzaW9uKS50b0JlKFwiMS4wLjAuMFwiKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZS5wYXJhbWV0ZXJzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlLnBhcmFtZXRlcnMudm5ldElkKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlLnZhcmlhYmxlcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZS52YXJpYWJsZXMuc3RhdGljTWVtYmVyTmFtZSkudG9CZShcbiAgICAgICAgXCJbZ3VpZChwYXJhbWV0ZXJzKCd2bmV0SWQnKSldXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlLnJlc291cmNlcykudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlLnJlc291cmNlc1swXS5uYW1lKS50b0JlKFxuICAgICAgICBcIltjb25jYXQocGFyYW1ldGVycygnYXZubUlkJyksICcvJywgdmFyaWFibGVzKCdzdGF0aWNNZW1iZXJOYW1lJykpXVwiLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZS5vdXRwdXRzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlLm91dHB1dHMubWVtYmVySWQudmFsdWUpLnRvQmUoXG4gICAgICAgIFwiW3Jlc291cmNlSWQoJ01pY3Jvc29mdC5OZXR3b3JrL25ldHdvcmtNYW5hZ2Vycy9uZXR3b3JrR3JvdXBzL3N0YXRpY01lbWJlcnMnLCB2YXJpYWJsZXMoJ3N0YXRpY01lbWJlck5hbWUnKSldXCIsXG4gICAgICApO1xuXG4gICAgICAvLyBWZXJpZnkgQVJNIHRlbXBsYXRlIHBhcmFtZXRlcnMgYXJlIHByZXNlcnZlZFxuICAgICAgY29uc3QgZGVwbG95bWVudFBhcmFtcyA9IGRldGFpbHMuZGVwbG95bWVudC5wcm9wZXJ0aWVzLnBhcmFtZXRlcnM7XG4gICAgICBleHBlY3QoZGVwbG95bWVudFBhcmFtcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChkZXBsb3ltZW50UGFyYW1zLnZuZXRJZC52YWx1ZSkudG9CZShcIltmaWVsZCgnaWQnKV1cIik7XG5cbiAgICAgIC8vIFZlcmlmeSBzY2hlbWEgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZCB0byBhbGxvdyBjb21wbGV4IG5lc3RlZCBzdHJ1Y3R1cmVzXG4gICAgICBleHBlY3QoYXphcGlSZXNvdXJjZS5zY2hlbWFfdmFsaWRhdGlvbl9lbmFibGVkKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChhemFwaVJlc291cmNlLmlnbm9yZV9taXNzaW5nX3Byb3BlcnR5KS50b0JlKHRydWUpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHN5bnRoZXNpemVkIGNvbmZpZyBoYXMgdGhlIGJvZHkgcHJvcGVydHkgc2V0XG4gICAgICBleHBlY3QoYXphcGlSZXNvdXJjZS5ib2R5KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcHJlc2VydmUgZGVlcGx5IG5lc3RlZCBsb2dpY2FsIG9wZXJhdG9yc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4UnVsZSA9IHtcbiAgICAgICAgaWY6IHtcbiAgICAgICAgICBhbGxPZjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXG4gICAgICAgICAgICAgIGVxdWFsczogXCJNaWNyb3NvZnQuTmV0d29yay92aXJ0dWFsTmV0d29ya3NcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZmllbGQ6XG4gICAgICAgICAgICAgICAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL2VuYWJsZURkb3NQcm90ZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgICBlcXVhbHM6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5vdDoge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDpcbiAgICAgICAgICAgICAgICAgICAgICBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrcy9zdWJuZXRzWypdLnNlcnZpY2VFbmRwb2ludHNbKl0uc2VydmljZVwiLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogXCJNaWNyb3NvZnQuU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgZWZmZWN0OiBcImF1ZGl0XCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiRGVlcGx5TmVzdGVkXCIsIHtcbiAgICAgICAgbmFtZTogXCJkZWVwbHktbmVzdGVkLXBvbGljeVwiLFxuICAgICAgICBwb2xpY3lSdWxlOiBjb21wbGV4UnVsZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wcm9wcy5wb2xpY3lSdWxlKS50b0VxdWFsKGNvbXBsZXhSdWxlKTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGNvbnN0IHN0YWNrQ29uZmlnID0gSlNPTi5wYXJzZShzeW50aGVzaXplZCk7XG4gICAgICBjb25zdCBhemFwaVJlc291cmNlID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgc3RhY2tDb25maWcucmVzb3VyY2UuYXphcGlfcmVzb3VyY2UsXG4gICAgICApWzBdIGFzIGFueTtcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZSBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNvbnN0cnVjdCdzIHByb3BzXG4gICAgICBleHBlY3QoXG4gICAgICAgIHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5UnVsZS5pZi5hbGxPZlsxXS5hbnlPZlsxXS5ub3QsXG4gICAgICApLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHBvbGljeURlZmluaXRpb24ucHJvcHMucG9saWN5UnVsZS5pZi5hbGxPZlsxXS5hbnlPZlsxXS5ub3QuZmllbGQsXG4gICAgICApLnRvQmUoXG4gICAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3N1Ym5ldHNbKl0uc2VydmljZUVuZHBvaW50c1sqXS5zZXJ2aWNlXCIsXG4gICAgICApO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHN5bnRoZXNpemVkIGNvbmZpZyBoYXMgdGhlIGJvZHkgcHJvcGVydHkgc2V0XG4gICAgICBleHBlY3QoYXphcGlSZXNvdXJjZS5ib2R5KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkVycm9yIEhhbmRsaW5nXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYW5kbGUgaW52YWxpZCBBUEkgdmVyc2lvbnMgZ3JhY2VmdWxseVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJJbnZhbGlkQVBJXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgICAgYXBpVmVyc2lvbjogXCJpbnZhbGlkLXZlcnNpb25cIixcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KFwiVW5zdXBwb3J0ZWQgQVBJIHZlcnNpb24gJ2ludmFsaWQtdmVyc2lvbidcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgdmFsaWRhdGlvbiBlcnJvcnMgd2hlbiB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiVmFsaWRhdGlvbkVycm9yXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogdW5kZWZpbmVkIGFzIGFueSwgLy8gTWlzc2luZyByZXF1aXJlZCBwb2xpY3lSdWxlXG4gICAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KFwiUmVxdWlyZWQgcHJvcGVydHkgJ3BvbGljeVJ1bGUnIGlzIG1pc3NpbmdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgc2NoZW1hIHJlZ2lzdHJhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJTY2hlbWFUZXN0XCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtcG9saWN5XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJKU0lJIENvbXBsaWFuY2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGhhdmUgSlNJSS1jb21wbGlhbnQgY29uc3RydWN0b3JcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiSnNpaVRlc3RcIiwge1xuICAgICAgICAgIG5hbWU6IFwianNpaS10ZXN0XCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgSlNJSS1jb21wbGlhbnQgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiSnNpaVByb3BzXCIsIHtcbiAgICAgICAgbmFtZTogXCJqc2lpLXByb3BzXCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5pZCkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5uYW1lKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBwb2xpY3lEZWZpbml0aW9uLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5wb2xpY3lUeXBlKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBwb2xpY3lEZWZpbml0aW9uLnBvbGljeU1vZGUpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIEpTSUktY29tcGxpYW50IG1ldGhvZHNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIkpzaWlNZXRob2RzXCIsIHtcbiAgICAgICAgbmFtZTogXCJqc2lpLW1ldGhvZHNcIixcbiAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHR5cGVvZiBwb2xpY3lEZWZpbml0aW9uLmxhdGVzdFZlcnNpb24pLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcG9saWN5RGVmaW5pdGlvbi5zdXBwb3J0ZWRWZXJzaW9ucykudG9CZShcImZ1bmN0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc2VyaWFsaXplIGNvbXBsZXggb2JqZWN0cyBjb3JyZWN0bHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJKc2lpU2VyaWFsaXphdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJqc2lpLXNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgICBpZjogeyBmaWVsZDogXCJsb2NhdGlvblwiLCBlcXVhbHM6IFwiZWFzdHVzXCIgfSxcbiAgICAgICAgICAgIHRoZW46IHsgZWZmZWN0OiBcImRlbnlcIiB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGVzdFBhcmFtOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocG9saWN5RGVmaW5pdGlvbi52YWxpZGF0aW9uUmVzdWx0KSxcbiAgICAgICkubm90LnRvVGhyb3coKTtcbiAgICAgIGV4cGVjdCgoKSA9PiBKU09OLnN0cmluZ2lmeShwb2xpY3lEZWZpbml0aW9uLnNjaGVtYSkpLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocG9saWN5RGVmaW5pdGlvbi52ZXJzaW9uQ29uZmlnKSxcbiAgICAgICkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJDREsgVGVycmFmb3JtIEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzeW50aGVzaXplIHRvIHZhbGlkIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlN5bnRoVGVzdFwiLCB7XG4gICAgICAgIG5hbWU6IFwic3ludGgtdGVzdFwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7XG4gICAgICAgICAgaWY6IHtcbiAgICAgICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgICAgIGVxdWFsczogXCJNaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXNcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoZW46IHtcbiAgICAgICAgICAgIGVmZmVjdDogXCJhdWRpdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9CZURlZmluZWQoKTtcblxuICAgICAgY29uc3Qgc3RhY2tDb25maWcgPSBKU09OLnBhcnNlKHN5bnRoZXNpemVkKTtcbiAgICAgIGV4cGVjdChzdGFja0NvbmZpZy5yZXNvdXJjZSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHdvcmsgaW4gY29tcGxleCBDREsgY29uc3RydWN0c1wiLCAoKSA9PiB7XG4gICAgICBjbGFzcyBDb21wbGV4Q29uc3RydWN0IGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtU3RhY2sge1xuICAgICAgICBjb25zdHJ1Y3RvcihzY29wZTogY2RrdGYuQXBwLCBpZDogc3RyaW5nKSB7XG4gICAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICAgIGNvbnN0IHBvbGljeTEgPSBuZXcgUG9saWN5RGVmaW5pdGlvbih0aGlzLCBcIlBvbGljeTFcIiwge1xuICAgICAgICAgICAgbmFtZTogXCJwb2xpY3ktMVwiLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiRmlyc3QgUG9saWN5XCIsXG4gICAgICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiYXVkaXRcIiB9IH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBwb2xpY3kyID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJQb2xpY3kyXCIsIHtcbiAgICAgICAgICAgIG5hbWU6IFwicG9saWN5LTJcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlNlY29uZCBQb2xpY3lcIixcbiAgICAgICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJkZW55XCIgfSB9LFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIxLTA2LTAxXCIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiUG9saWN5MUlkXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBwb2xpY3kxLmlkLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIlBvbGljeTJJZFwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogcG9saWN5Mi5pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgQ29tcGxleENvbnN0cnVjdChhcHAsIFwiQ29tcGxleFN0YWNrXCIpO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBwb2xpY3kgZGVmaW5pdGlvbnMgaW4gdGhlIHNhbWUgc3RhY2tcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9saWN5MSA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlBvbGljeURlZmluaXRpb24xXCIsIHtcbiAgICAgICAgbmFtZTogXCJwb2xpY3ktMVwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiYXVkaXRcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcG9saWN5MiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIlBvbGljeURlZmluaXRpb24yXCIsIHtcbiAgICAgICAgbmFtZTogXCJwb2xpY3ktMlwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiZGVueVwiIH0gfSxcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIxLTA2LTAxXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHBvbGljeTEucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMS0wNi0wMVwiKTtcbiAgICAgIGV4cGVjdChwb2xpY3kyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjEtMDYtMDFcIik7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUG9saWN5IERlZmluaXRpb24gVHlwZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgQnVpbHRJbiBwb2xpY3kgdHlwZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24oc3RhY2ssIFwiQnVpbHRJblBvbGljeVwiLCB7XG4gICAgICAgIG5hbWU6IFwiYnVpbHRpbi1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5VHlwZTogXCJCdWlsdEluXCIsXG4gICAgICAgIHBvbGljeVJ1bGU6IHsgaWY6IHt9LCB0aGVuOiB7IGVmZmVjdDogXCJhdWRpdFwiIH0gfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocG9saWN5RGVmaW5pdGlvbi5wb2xpY3lUeXBlKS50b0JlKFwiQnVpbHRJblwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgU3RhdGljIHBvbGljeSB0eXBlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbihzdGFjaywgXCJTdGF0aWNQb2xpY3lcIiwge1xuICAgICAgICBuYW1lOiBcInN0YXRpYy1wb2xpY3lcIixcbiAgICAgICAgcG9saWN5VHlwZTogXCJTdGF0aWNcIixcbiAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImF1ZGl0XCIgfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChwb2xpY3lEZWZpbml0aW9uLnBvbGljeVR5cGUpLnRvQmUoXCJTdGF0aWNcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IGRpZmZlcmVudCBwb2xpY3kgbW9kZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlZFBvbGljeSA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHN0YWNrLCBcIkluZGV4ZWRQb2xpY3lcIiwge1xuICAgICAgICBuYW1lOiBcImluZGV4ZWQtcG9saWN5XCIsXG4gICAgICAgIG1vZGU6IFwiSW5kZXhlZFwiLFxuICAgICAgICBwb2xpY3lSdWxlOiB7IGlmOiB7fSwgdGhlbjogeyBlZmZlY3Q6IFwiYXVkaXRcIiB9IH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGluZGV4ZWRQb2xpY3kucG9saWN5TW9kZSkudG9CZShcIkluZGV4ZWRcIik7XG5cbiAgICAgIGNvbnN0IHJlc291cmNlUHJvdmlkZXJQb2xpY3kgPSBuZXcgUG9saWN5RGVmaW5pdGlvbihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiUmVzb3VyY2VQcm92aWRlclBvbGljeVwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyZXNvdXJjZS1wcm92aWRlci1wb2xpY3lcIixcbiAgICAgICAgICBtb2RlOiBcIk1pY3Jvc29mdC5LZXlWYXVsdC5EYXRhXCIsXG4gICAgICAgICAgcG9saWN5UnVsZTogeyBpZjoge30sIHRoZW46IHsgZWZmZWN0OiBcImF1ZGl0XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHJlc291cmNlUHJvdmlkZXJQb2xpY3kucG9saWN5TW9kZSkudG9CZShcIk1pY3Jvc29mdC5LZXlWYXVsdC5EYXRhXCIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -264,7 +264,7 @@ class PrivateDnsZone extends azapi_resource_1.AzapiResource {
264
264
  }
265
265
  exports.PrivateDnsZone = PrivateDnsZone;
266
266
  _a = JSII_RTTI_SYMBOL_1;
267
- PrivateDnsZone[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsZone", version: "1.3.0" };
267
+ PrivateDnsZone[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsZone", version: "1.4.0" };
268
268
  // Static initializer runs once when the class is first loaded
269
269
  (() => {
270
270
  azapi_resource_1.AzapiResource.registerSchemas(private_dns_zone_schemas_1.PRIVATE_DNS_ZONE_TYPE, private_dns_zone_schemas_1.ALL_PRIVATE_DNS_ZONE_VERSIONS);
@@ -243,7 +243,7 @@ class PrivateDnsZoneLink extends azapi_resource_1.AzapiResource {
243
243
  }
244
244
  exports.PrivateDnsZoneLink = PrivateDnsZoneLink;
245
245
  _a = JSII_RTTI_SYMBOL_1;
246
- PrivateDnsZoneLink[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsZoneLink", version: "1.3.0" };
246
+ PrivateDnsZoneLink[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PrivateDnsZoneLink", version: "1.4.0" };
247
247
  (() => {
248
248
  azapi_resource_1.AzapiResource.registerSchemas(private_dns_zone_link_schemas_1.PRIVATE_DNS_ZONE_LINK_TYPE, private_dns_zone_link_schemas_1.ALL_PRIVATE_DNS_ZONE_LINK_VERSIONS);
249
249
  })();
@@ -238,7 +238,7 @@ class PublicIPAddress extends azapi_resource_1.AzapiResource {
238
238
  }
239
239
  exports.PublicIPAddress = PublicIPAddress;
240
240
  _a = JSII_RTTI_SYMBOL_1;
241
- PublicIPAddress[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PublicIPAddress", version: "1.3.0" };
241
+ PublicIPAddress[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PublicIPAddress", version: "1.4.0" };
242
242
  (() => {
243
243
  azapi_resource_1.AzapiResource.registerSchemas(public_ip_address_schemas_1.PUBLIC_IP_ADDRESS_TYPE, public_ip_address_schemas_1.ALL_PUBLIC_IP_ADDRESS_VERSIONS);
244
244
  })();
@@ -194,7 +194,7 @@ class ResourceGroup extends azapi_resource_1.AzapiResource {
194
194
  }
195
195
  exports.ResourceGroup = ResourceGroup;
196
196
  _a = JSII_RTTI_SYMBOL_1;
197
- ResourceGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ResourceGroup", version: "1.3.0" };
197
+ ResourceGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ResourceGroup", version: "1.4.0" };
198
198
  // Static initializer runs once when the class is first loaded
199
199
  (() => {
200
200
  azapi_resource_1.AzapiResource.registerSchemas(resource_group_schemas_1.RESOURCE_GROUP_TYPE, resource_group_schemas_1.ALL_RESOURCE_GROUP_VERSIONS);
@@ -250,7 +250,7 @@ class RoleAssignment extends azapi_resource_1.AzapiResource {
250
250
  }
251
251
  exports.RoleAssignment = RoleAssignment;
252
252
  _a = JSII_RTTI_SYMBOL_1;
253
- RoleAssignment[_a] = { fqn: "@microsoft/terraform-cdk-constructs.RoleAssignment", version: "1.3.0" };
253
+ RoleAssignment[_a] = { fqn: "@microsoft/terraform-cdk-constructs.RoleAssignment", version: "1.4.0" };
254
254
  (() => {
255
255
  azapi_resource_1.AzapiResource.registerSchemas(role_assignment_schemas_1.ROLE_ASSIGNMENT_TYPE, role_assignment_schemas_1.ALL_ROLE_ASSIGNMENT_VERSIONS);
256
256
  })();
@@ -185,7 +185,7 @@ class RoleDefinition extends azapi_resource_1.AzapiResource {
185
185
  }
186
186
  exports.RoleDefinition = RoleDefinition;
187
187
  _a = JSII_RTTI_SYMBOL_1;
188
- RoleDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.RoleDefinition", version: "1.3.0" };
188
+ RoleDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.RoleDefinition", version: "1.4.0" };
189
189
  (() => {
190
190
  azapi_resource_1.AzapiResource.registerSchemas(role_definition_schemas_1.ROLE_DEFINITION_TYPE, role_definition_schemas_1.ALL_ROLE_DEFINITION_VERSIONS);
191
191
  })();
@@ -343,7 +343,7 @@ class StorageAccount extends azapi_resource_1.AzapiResource {
343
343
  }
344
344
  exports.StorageAccount = StorageAccount;
345
345
  _a = JSII_RTTI_SYMBOL_1;
346
- StorageAccount[_a] = { fqn: "@microsoft/terraform-cdk-constructs.StorageAccount", version: "1.3.0" };
346
+ StorageAccount[_a] = { fqn: "@microsoft/terraform-cdk-constructs.StorageAccount", version: "1.4.0" };
347
347
  // Static initializer runs once when the class is first loaded
348
348
  (() => {
349
349
  azapi_resource_1.AzapiResource.registerSchemas(storage_account_schemas_1.STORAGE_ACCOUNT_TYPE, storage_account_schemas_1.ALL_STORAGE_ACCOUNT_VERSIONS);