aws-sdk-securityhub 1.68.0 → 1.70.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca8c5abc31525f9fe81207edb4a75482595dfd4efa5c5a0beb6c38ea9df3dc2d
4
- data.tar.gz: ad8b8f6f791510ed8814ff31e5f98a664f109e9f6fd394c2ab7a96a1ded37c9c
3
+ metadata.gz: dc54859bd0fcd0ba0ac590359bf400c57d59421d1a88a73351b393ba4b08c930
4
+ data.tar.gz: 49fe23b8cf2973a26eba748790806d33592b1a05ada6c386379d4f85979ce1c5
5
5
  SHA512:
6
- metadata.gz: c42ec11c555feb6e70c4891a8218136ee5d7ddf86d82c273f4898176471aea076e613d8e900b679d8e654b2f39330ffea5e474638f7dee8bda1f608bdda5a0cb
7
- data.tar.gz: 6b96cd993507dfab36c5b951547988c68fd74d3509e7d711fd24a159357762a9de6626579a5bc70b04e1bc0398442ce4c4efde72d63caed229c6c14fc189c923
6
+ metadata.gz: 4fbd0e45a59347b374bec24a1990f2d812e19dfdedc492cba10cb516a075feeb39c371b0be33c7360ccbe93f6a7c0add7d86900f81e781cf080847f14f223ad6
7
+ data.tar.gz: 6362d5e5df1f75cba5ca8dd70281c611eda017b640c50c6345a2839494beb052072cda816f1dd440d8bde6acb8417a4c245b7e4e0ceec6aaa01bfe6506a698b7
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.70.0 (2022-10-25)
5
+ ------------------
6
+
7
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
8
+
9
+ 1.69.0 (2022-08-22)
10
+ ------------------
11
+
12
+ * Feature - Added new resource details objects to ASFF, including resources for AwsBackupBackupVault, AwsBackupBackupPlan and AwsBackupRecoveryPoint. Added FixAvailable, FixedInVersion and Remediation to Vulnerability.
13
+
4
14
  1.68.0 (2022-07-26)
5
15
  ------------------
6
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.68.0
1
+ 1.70.0
@@ -30,7 +30,7 @@ require 'aws-sdk-core/plugins/http_checksum.rb'
30
30
  require 'aws-sdk-core/plugins/checksum_algorithm.rb'
31
31
  require 'aws-sdk-core/plugins/defaults_mode.rb'
32
32
  require 'aws-sdk-core/plugins/recursion_detection.rb'
33
- require 'aws-sdk-core/plugins/signature_v4.rb'
33
+ require 'aws-sdk-core/plugins/sign.rb'
34
34
  require 'aws-sdk-core/plugins/protocols/rest_json.rb'
35
35
 
36
36
  Aws::Plugins::GlobalConfiguration.add_identifier(:securityhub)
@@ -79,8 +79,9 @@ module Aws::SecurityHub
79
79
  add_plugin(Aws::Plugins::ChecksumAlgorithm)
80
80
  add_plugin(Aws::Plugins::DefaultsMode)
81
81
  add_plugin(Aws::Plugins::RecursionDetection)
82
- add_plugin(Aws::Plugins::SignatureV4)
82
+ add_plugin(Aws::Plugins::Sign)
83
83
  add_plugin(Aws::Plugins::Protocols::RestJson)
84
+ add_plugin(Aws::SecurityHub::Plugins::Endpoints)
84
85
 
85
86
  # @overload initialize(options)
86
87
  # @param [Hash] options
@@ -287,6 +288,19 @@ module Aws::SecurityHub
287
288
  # ** Please note ** When response stubbing is enabled, no HTTP
288
289
  # requests are made, and retries are disabled.
289
290
  #
291
+ # @option options [Aws::TokenProvider] :token_provider
292
+ # A Bearer Token Provider. This can be an instance of any one of the
293
+ # following classes:
294
+ #
295
+ # * `Aws::StaticTokenProvider` - Used for configuring static, non-refreshing
296
+ # tokens.
297
+ #
298
+ # * `Aws::SSOTokenProvider` - Used for loading tokens from AWS SSO using an
299
+ # access token generated from `aws login`.
300
+ #
301
+ # When `:token_provider` is not configured directly, the `Aws::TokenProviderChain`
302
+ # will be used to search for tokens configured for your profile in shared configuration files.
303
+ #
290
304
  # @option options [Boolean] :use_dualstack_endpoint
291
305
  # When set to `true`, dualstack enabled endpoints (with `.aws` TLD)
292
306
  # will be used if available.
@@ -300,6 +314,9 @@ module Aws::SecurityHub
300
314
  # When `true`, request parameters are validated before
301
315
  # sending the request.
302
316
  #
317
+ # @option options [Aws::SecurityHub::EndpointProvider] :endpoint_provider
318
+ # The endpoint provider used to resolve endpoints. Any object that responds to `#resolve_endpoint(parameters)` where `parameters` is a Struct similar to `Aws::SecurityHub::EndpointParameters`
319
+ #
303
320
  # @option options [URI::HTTP,String] :http_proxy A proxy to send
304
321
  # requests through. Formatted like 'http://proxy.com:123'.
305
322
  #
@@ -3630,6 +3647,88 @@ module Aws::SecurityHub
3630
3647
  # },
3631
3648
  # ],
3632
3649
  # },
3650
+ # aws_backup_backup_vault: {
3651
+ # backup_vault_arn: "NonEmptyString",
3652
+ # backup_vault_name: "NonEmptyString",
3653
+ # encryption_key_arn: "NonEmptyString",
3654
+ # notifications: {
3655
+ # backup_vault_events: ["NonEmptyString"],
3656
+ # sns_topic_arn: "NonEmptyString",
3657
+ # },
3658
+ # access_policy: "NonEmptyString",
3659
+ # },
3660
+ # aws_backup_backup_plan: {
3661
+ # backup_plan: {
3662
+ # backup_plan_name: "NonEmptyString",
3663
+ # advanced_backup_settings: [
3664
+ # {
3665
+ # backup_options: {
3666
+ # "NonEmptyString" => "NonEmptyString",
3667
+ # },
3668
+ # resource_type: "NonEmptyString",
3669
+ # },
3670
+ # ],
3671
+ # backup_plan_rule: [
3672
+ # {
3673
+ # target_backup_vault: "NonEmptyString",
3674
+ # start_window_minutes: 1,
3675
+ # schedule_expression: "NonEmptyString",
3676
+ # rule_name: "NonEmptyString",
3677
+ # rule_id: "NonEmptyString",
3678
+ # enable_continuous_backup: false,
3679
+ # completion_window_minutes: 1,
3680
+ # copy_actions: [
3681
+ # {
3682
+ # destination_backup_vault_arn: "NonEmptyString",
3683
+ # lifecycle: {
3684
+ # delete_after_days: 1,
3685
+ # move_to_cold_storage_after_days: 1,
3686
+ # },
3687
+ # },
3688
+ # ],
3689
+ # lifecycle: {
3690
+ # delete_after_days: 1,
3691
+ # move_to_cold_storage_after_days: 1,
3692
+ # },
3693
+ # },
3694
+ # ],
3695
+ # },
3696
+ # backup_plan_arn: "NonEmptyString",
3697
+ # backup_plan_id: "NonEmptyString",
3698
+ # version_id: "NonEmptyString",
3699
+ # },
3700
+ # aws_backup_recovery_point: {
3701
+ # backup_size_in_bytes: 1,
3702
+ # backup_vault_arn: "NonEmptyString",
3703
+ # backup_vault_name: "NonEmptyString",
3704
+ # calculated_lifecycle: {
3705
+ # delete_at: "NonEmptyString",
3706
+ # move_to_cold_storage_at: "NonEmptyString",
3707
+ # },
3708
+ # completion_date: "NonEmptyString",
3709
+ # created_by: {
3710
+ # backup_plan_arn: "NonEmptyString",
3711
+ # backup_plan_id: "NonEmptyString",
3712
+ # backup_plan_version: "NonEmptyString",
3713
+ # backup_rule_id: "NonEmptyString",
3714
+ # },
3715
+ # creation_date: "NonEmptyString",
3716
+ # encryption_key_arn: "NonEmptyString",
3717
+ # iam_role_arn: "NonEmptyString",
3718
+ # is_encrypted: false,
3719
+ # last_restore_time: "NonEmptyString",
3720
+ # lifecycle: {
3721
+ # delete_after_days: 1,
3722
+ # move_to_cold_storage_after_days: 1,
3723
+ # },
3724
+ # recovery_point_arn: "NonEmptyString",
3725
+ # resource_arn: "NonEmptyString",
3726
+ # resource_type: "NonEmptyString",
3727
+ # source_backup_vault_arn: "NonEmptyString",
3728
+ # status: "NonEmptyString",
3729
+ # status_message: "NonEmptyString",
3730
+ # storage_class: "NonEmptyString",
3731
+ # },
3633
3732
  # },
3634
3733
  # },
3635
3734
  # ],
@@ -3672,6 +3771,8 @@ module Aws::SecurityHub
3672
3771
  # architecture: "NonEmptyString",
3673
3772
  # package_manager: "NonEmptyString",
3674
3773
  # file_path: "NonEmptyString",
3774
+ # fixed_in_version: "NonEmptyString",
3775
+ # remediation: "NonEmptyString",
3675
3776
  # },
3676
3777
  # ],
3677
3778
  # cvss: [
@@ -3697,6 +3798,7 @@ module Aws::SecurityHub
3697
3798
  # vendor_updated_at: "NonEmptyString",
3698
3799
  # },
3699
3800
  # reference_urls: ["NonEmptyString"],
3801
+ # fix_available: "YES", # accepts YES, NO, PARTIAL
3700
3802
  # },
3701
3803
  # ],
3702
3804
  # patch_summary: {
@@ -8429,6 +8531,59 @@ module Aws::SecurityHub
8429
8531
  # resp.findings[0].resources[0].details.aws_ecs_task.containers[0].mount_points[0].source_volume #=> String
8430
8532
  # resp.findings[0].resources[0].details.aws_ecs_task.containers[0].mount_points[0].container_path #=> String
8431
8533
  # resp.findings[0].resources[0].details.aws_ecs_task.containers[0].privileged #=> Boolean
8534
+ # resp.findings[0].resources[0].details.aws_backup_backup_vault.backup_vault_arn #=> String
8535
+ # resp.findings[0].resources[0].details.aws_backup_backup_vault.backup_vault_name #=> String
8536
+ # resp.findings[0].resources[0].details.aws_backup_backup_vault.encryption_key_arn #=> String
8537
+ # resp.findings[0].resources[0].details.aws_backup_backup_vault.notifications.backup_vault_events #=> Array
8538
+ # resp.findings[0].resources[0].details.aws_backup_backup_vault.notifications.backup_vault_events[0] #=> String
8539
+ # resp.findings[0].resources[0].details.aws_backup_backup_vault.notifications.sns_topic_arn #=> String
8540
+ # resp.findings[0].resources[0].details.aws_backup_backup_vault.access_policy #=> String
8541
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_name #=> String
8542
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.advanced_backup_settings #=> Array
8543
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.advanced_backup_settings[0].backup_options #=> Hash
8544
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.advanced_backup_settings[0].backup_options["NonEmptyString"] #=> String
8545
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.advanced_backup_settings[0].resource_type #=> String
8546
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule #=> Array
8547
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].target_backup_vault #=> String
8548
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].start_window_minutes #=> Integer
8549
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].schedule_expression #=> String
8550
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].rule_name #=> String
8551
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].rule_id #=> String
8552
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].enable_continuous_backup #=> Boolean
8553
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].completion_window_minutes #=> Integer
8554
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].copy_actions #=> Array
8555
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].copy_actions[0].destination_backup_vault_arn #=> String
8556
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].copy_actions[0].lifecycle.delete_after_days #=> Integer
8557
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].copy_actions[0].lifecycle.move_to_cold_storage_after_days #=> Integer
8558
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].lifecycle.delete_after_days #=> Integer
8559
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan.backup_plan_rule[0].lifecycle.move_to_cold_storage_after_days #=> Integer
8560
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan_arn #=> String
8561
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.backup_plan_id #=> String
8562
+ # resp.findings[0].resources[0].details.aws_backup_backup_plan.version_id #=> String
8563
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.backup_size_in_bytes #=> Integer
8564
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.backup_vault_arn #=> String
8565
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.backup_vault_name #=> String
8566
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.calculated_lifecycle.delete_at #=> String
8567
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.calculated_lifecycle.move_to_cold_storage_at #=> String
8568
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.completion_date #=> String
8569
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.created_by.backup_plan_arn #=> String
8570
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.created_by.backup_plan_id #=> String
8571
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.created_by.backup_plan_version #=> String
8572
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.created_by.backup_rule_id #=> String
8573
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.creation_date #=> String
8574
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.encryption_key_arn #=> String
8575
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.iam_role_arn #=> String
8576
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.is_encrypted #=> Boolean
8577
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.last_restore_time #=> String
8578
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.lifecycle.delete_after_days #=> Integer
8579
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.lifecycle.move_to_cold_storage_after_days #=> Integer
8580
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.recovery_point_arn #=> String
8581
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.resource_arn #=> String
8582
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.resource_type #=> String
8583
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.source_backup_vault_arn #=> String
8584
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.status #=> String
8585
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.status_message #=> String
8586
+ # resp.findings[0].resources[0].details.aws_backup_recovery_point.storage_class #=> String
8432
8587
  # resp.findings[0].compliance.status #=> String, one of "PASSED", "WARNING", "FAILED", "NOT_AVAILABLE"
8433
8588
  # resp.findings[0].compliance.related_requirements #=> Array
8434
8589
  # resp.findings[0].compliance.related_requirements[0] #=> String
@@ -8455,6 +8610,8 @@ module Aws::SecurityHub
8455
8610
  # resp.findings[0].vulnerabilities[0].vulnerable_packages[0].architecture #=> String
8456
8611
  # resp.findings[0].vulnerabilities[0].vulnerable_packages[0].package_manager #=> String
8457
8612
  # resp.findings[0].vulnerabilities[0].vulnerable_packages[0].file_path #=> String
8613
+ # resp.findings[0].vulnerabilities[0].vulnerable_packages[0].fixed_in_version #=> String
8614
+ # resp.findings[0].vulnerabilities[0].vulnerable_packages[0].remediation #=> String
8458
8615
  # resp.findings[0].vulnerabilities[0].cvss #=> Array
8459
8616
  # resp.findings[0].vulnerabilities[0].cvss[0].version #=> String
8460
8617
  # resp.findings[0].vulnerabilities[0].cvss[0].base_score #=> Float
@@ -8472,6 +8629,7 @@ module Aws::SecurityHub
8472
8629
  # resp.findings[0].vulnerabilities[0].vendor.vendor_updated_at #=> String
8473
8630
  # resp.findings[0].vulnerabilities[0].reference_urls #=> Array
8474
8631
  # resp.findings[0].vulnerabilities[0].reference_urls[0] #=> String
8632
+ # resp.findings[0].vulnerabilities[0].fix_available #=> String, one of "YES", "NO", "PARTIAL"
8475
8633
  # resp.findings[0].patch_summary.id #=> String
8476
8634
  # resp.findings[0].patch_summary.installed_count #=> Integer
8477
8635
  # resp.findings[0].patch_summary.missing_count #=> Integer
@@ -10975,7 +11133,7 @@ module Aws::SecurityHub
10975
11133
  params: params,
10976
11134
  config: config)
10977
11135
  context[:gem_name] = 'aws-sdk-securityhub'
10978
- context[:gem_version] = '1.68.0'
11136
+ context[:gem_version] = '1.70.0'
10979
11137
  Seahorse::Client::Request.new(handlers, context)
10980
11138
  end
10981
11139
 
@@ -67,6 +67,21 @@ module Aws::SecurityHub
67
67
  AwsAutoScalingLaunchConfigurationDetails = Shapes::StructureShape.new(name: 'AwsAutoScalingLaunchConfigurationDetails')
68
68
  AwsAutoScalingLaunchConfigurationInstanceMonitoringDetails = Shapes::StructureShape.new(name: 'AwsAutoScalingLaunchConfigurationInstanceMonitoringDetails')
69
69
  AwsAutoScalingLaunchConfigurationMetadataOptions = Shapes::StructureShape.new(name: 'AwsAutoScalingLaunchConfigurationMetadataOptions')
70
+ AwsBackupBackupPlanAdvancedBackupSettingsDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupPlanAdvancedBackupSettingsDetails')
71
+ AwsBackupBackupPlanAdvancedBackupSettingsList = Shapes::ListShape.new(name: 'AwsBackupBackupPlanAdvancedBackupSettingsList')
72
+ AwsBackupBackupPlanBackupPlanDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupPlanBackupPlanDetails')
73
+ AwsBackupBackupPlanDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupPlanDetails')
74
+ AwsBackupBackupPlanLifecycleDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupPlanLifecycleDetails')
75
+ AwsBackupBackupPlanRuleCopyActionsDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupPlanRuleCopyActionsDetails')
76
+ AwsBackupBackupPlanRuleCopyActionsList = Shapes::ListShape.new(name: 'AwsBackupBackupPlanRuleCopyActionsList')
77
+ AwsBackupBackupPlanRuleDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupPlanRuleDetails')
78
+ AwsBackupBackupPlanRuleList = Shapes::ListShape.new(name: 'AwsBackupBackupPlanRuleList')
79
+ AwsBackupBackupVaultDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupVaultDetails')
80
+ AwsBackupBackupVaultNotificationsDetails = Shapes::StructureShape.new(name: 'AwsBackupBackupVaultNotificationsDetails')
81
+ AwsBackupRecoveryPointCalculatedLifecycleDetails = Shapes::StructureShape.new(name: 'AwsBackupRecoveryPointCalculatedLifecycleDetails')
82
+ AwsBackupRecoveryPointCreatedByDetails = Shapes::StructureShape.new(name: 'AwsBackupRecoveryPointCreatedByDetails')
83
+ AwsBackupRecoveryPointDetails = Shapes::StructureShape.new(name: 'AwsBackupRecoveryPointDetails')
84
+ AwsBackupRecoveryPointLifecycleDetails = Shapes::StructureShape.new(name: 'AwsBackupRecoveryPointLifecycleDetails')
70
85
  AwsCertificateManagerCertificateDetails = Shapes::StructureShape.new(name: 'AwsCertificateManagerCertificateDetails')
71
86
  AwsCertificateManagerCertificateDomainValidationOption = Shapes::StructureShape.new(name: 'AwsCertificateManagerCertificateDomainValidationOption')
72
87
  AwsCertificateManagerCertificateDomainValidationOptions = Shapes::ListShape.new(name: 'AwsCertificateManagerCertificateDomainValidationOptions')
@@ -848,6 +863,7 @@ module Aws::SecurityHub
848
863
  VpcInfoIpv6CidrBlockSetList = Shapes::ListShape.new(name: 'VpcInfoIpv6CidrBlockSetList')
849
864
  VpcInfoPeeringOptionsDetails = Shapes::StructureShape.new(name: 'VpcInfoPeeringOptionsDetails')
850
865
  Vulnerability = Shapes::StructureShape.new(name: 'Vulnerability')
866
+ VulnerabilityFixAvailable = Shapes::StringShape.new(name: 'VulnerabilityFixAvailable')
851
867
  VulnerabilityList = Shapes::ListShape.new(name: 'VulnerabilityList')
852
868
  VulnerabilityVendor = Shapes::StructureShape.new(name: 'VulnerabilityVendor')
853
869
  WafAction = Shapes::StructureShape.new(name: 'WafAction')
@@ -1133,6 +1149,92 @@ module Aws::SecurityHub
1133
1149
  AwsAutoScalingLaunchConfigurationMetadataOptions.add_member(:http_tokens, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "HttpTokens"))
1134
1150
  AwsAutoScalingLaunchConfigurationMetadataOptions.struct_class = Types::AwsAutoScalingLaunchConfigurationMetadataOptions
1135
1151
 
1152
+ AwsBackupBackupPlanAdvancedBackupSettingsDetails.add_member(:backup_options, Shapes::ShapeRef.new(shape: FieldMap, location_name: "BackupOptions"))
1153
+ AwsBackupBackupPlanAdvancedBackupSettingsDetails.add_member(:resource_type, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "ResourceType"))
1154
+ AwsBackupBackupPlanAdvancedBackupSettingsDetails.struct_class = Types::AwsBackupBackupPlanAdvancedBackupSettingsDetails
1155
+
1156
+ AwsBackupBackupPlanAdvancedBackupSettingsList.member = Shapes::ShapeRef.new(shape: AwsBackupBackupPlanAdvancedBackupSettingsDetails)
1157
+
1158
+ AwsBackupBackupPlanBackupPlanDetails.add_member(:backup_plan_name, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupPlanName"))
1159
+ AwsBackupBackupPlanBackupPlanDetails.add_member(:advanced_backup_settings, Shapes::ShapeRef.new(shape: AwsBackupBackupPlanAdvancedBackupSettingsList, location_name: "AdvancedBackupSettings"))
1160
+ AwsBackupBackupPlanBackupPlanDetails.add_member(:backup_plan_rule, Shapes::ShapeRef.new(shape: AwsBackupBackupPlanRuleList, location_name: "BackupPlanRule"))
1161
+ AwsBackupBackupPlanBackupPlanDetails.struct_class = Types::AwsBackupBackupPlanBackupPlanDetails
1162
+
1163
+ AwsBackupBackupPlanDetails.add_member(:backup_plan, Shapes::ShapeRef.new(shape: AwsBackupBackupPlanBackupPlanDetails, location_name: "BackupPlan"))
1164
+ AwsBackupBackupPlanDetails.add_member(:backup_plan_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupPlanArn"))
1165
+ AwsBackupBackupPlanDetails.add_member(:backup_plan_id, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupPlanId"))
1166
+ AwsBackupBackupPlanDetails.add_member(:version_id, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "VersionId"))
1167
+ AwsBackupBackupPlanDetails.struct_class = Types::AwsBackupBackupPlanDetails
1168
+
1169
+ AwsBackupBackupPlanLifecycleDetails.add_member(:delete_after_days, Shapes::ShapeRef.new(shape: Long, location_name: "DeleteAfterDays"))
1170
+ AwsBackupBackupPlanLifecycleDetails.add_member(:move_to_cold_storage_after_days, Shapes::ShapeRef.new(shape: Long, location_name: "MoveToColdStorageAfterDays"))
1171
+ AwsBackupBackupPlanLifecycleDetails.struct_class = Types::AwsBackupBackupPlanLifecycleDetails
1172
+
1173
+ AwsBackupBackupPlanRuleCopyActionsDetails.add_member(:destination_backup_vault_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "DestinationBackupVaultArn"))
1174
+ AwsBackupBackupPlanRuleCopyActionsDetails.add_member(:lifecycle, Shapes::ShapeRef.new(shape: AwsBackupBackupPlanLifecycleDetails, location_name: "Lifecycle"))
1175
+ AwsBackupBackupPlanRuleCopyActionsDetails.struct_class = Types::AwsBackupBackupPlanRuleCopyActionsDetails
1176
+
1177
+ AwsBackupBackupPlanRuleCopyActionsList.member = Shapes::ShapeRef.new(shape: AwsBackupBackupPlanRuleCopyActionsDetails)
1178
+
1179
+ AwsBackupBackupPlanRuleDetails.add_member(:target_backup_vault, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "TargetBackupVault"))
1180
+ AwsBackupBackupPlanRuleDetails.add_member(:start_window_minutes, Shapes::ShapeRef.new(shape: Long, location_name: "StartWindowMinutes"))
1181
+ AwsBackupBackupPlanRuleDetails.add_member(:schedule_expression, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "ScheduleExpression"))
1182
+ AwsBackupBackupPlanRuleDetails.add_member(:rule_name, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "RuleName"))
1183
+ AwsBackupBackupPlanRuleDetails.add_member(:rule_id, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "RuleId"))
1184
+ AwsBackupBackupPlanRuleDetails.add_member(:enable_continuous_backup, Shapes::ShapeRef.new(shape: Boolean, location_name: "EnableContinuousBackup"))
1185
+ AwsBackupBackupPlanRuleDetails.add_member(:completion_window_minutes, Shapes::ShapeRef.new(shape: Long, location_name: "CompletionWindowMinutes"))
1186
+ AwsBackupBackupPlanRuleDetails.add_member(:copy_actions, Shapes::ShapeRef.new(shape: AwsBackupBackupPlanRuleCopyActionsList, location_name: "CopyActions"))
1187
+ AwsBackupBackupPlanRuleDetails.add_member(:lifecycle, Shapes::ShapeRef.new(shape: AwsBackupBackupPlanLifecycleDetails, location_name: "Lifecycle"))
1188
+ AwsBackupBackupPlanRuleDetails.struct_class = Types::AwsBackupBackupPlanRuleDetails
1189
+
1190
+ AwsBackupBackupPlanRuleList.member = Shapes::ShapeRef.new(shape: AwsBackupBackupPlanRuleDetails)
1191
+
1192
+ AwsBackupBackupVaultDetails.add_member(:backup_vault_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupVaultArn"))
1193
+ AwsBackupBackupVaultDetails.add_member(:backup_vault_name, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupVaultName"))
1194
+ AwsBackupBackupVaultDetails.add_member(:encryption_key_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "EncryptionKeyArn"))
1195
+ AwsBackupBackupVaultDetails.add_member(:notifications, Shapes::ShapeRef.new(shape: AwsBackupBackupVaultNotificationsDetails, location_name: "Notifications"))
1196
+ AwsBackupBackupVaultDetails.add_member(:access_policy, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "AccessPolicy"))
1197
+ AwsBackupBackupVaultDetails.struct_class = Types::AwsBackupBackupVaultDetails
1198
+
1199
+ AwsBackupBackupVaultNotificationsDetails.add_member(:backup_vault_events, Shapes::ShapeRef.new(shape: NonEmptyStringList, location_name: "BackupVaultEvents"))
1200
+ AwsBackupBackupVaultNotificationsDetails.add_member(:sns_topic_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "SnsTopicArn"))
1201
+ AwsBackupBackupVaultNotificationsDetails.struct_class = Types::AwsBackupBackupVaultNotificationsDetails
1202
+
1203
+ AwsBackupRecoveryPointCalculatedLifecycleDetails.add_member(:delete_at, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "DeleteAt"))
1204
+ AwsBackupRecoveryPointCalculatedLifecycleDetails.add_member(:move_to_cold_storage_at, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "MoveToColdStorageAt"))
1205
+ AwsBackupRecoveryPointCalculatedLifecycleDetails.struct_class = Types::AwsBackupRecoveryPointCalculatedLifecycleDetails
1206
+
1207
+ AwsBackupRecoveryPointCreatedByDetails.add_member(:backup_plan_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupPlanArn"))
1208
+ AwsBackupRecoveryPointCreatedByDetails.add_member(:backup_plan_id, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupPlanId"))
1209
+ AwsBackupRecoveryPointCreatedByDetails.add_member(:backup_plan_version, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupPlanVersion"))
1210
+ AwsBackupRecoveryPointCreatedByDetails.add_member(:backup_rule_id, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupRuleId"))
1211
+ AwsBackupRecoveryPointCreatedByDetails.struct_class = Types::AwsBackupRecoveryPointCreatedByDetails
1212
+
1213
+ AwsBackupRecoveryPointDetails.add_member(:backup_size_in_bytes, Shapes::ShapeRef.new(shape: Long, location_name: "BackupSizeInBytes"))
1214
+ AwsBackupRecoveryPointDetails.add_member(:backup_vault_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupVaultArn"))
1215
+ AwsBackupRecoveryPointDetails.add_member(:backup_vault_name, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "BackupVaultName"))
1216
+ AwsBackupRecoveryPointDetails.add_member(:calculated_lifecycle, Shapes::ShapeRef.new(shape: AwsBackupRecoveryPointCalculatedLifecycleDetails, location_name: "CalculatedLifecycle"))
1217
+ AwsBackupRecoveryPointDetails.add_member(:completion_date, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "CompletionDate"))
1218
+ AwsBackupRecoveryPointDetails.add_member(:created_by, Shapes::ShapeRef.new(shape: AwsBackupRecoveryPointCreatedByDetails, location_name: "CreatedBy"))
1219
+ AwsBackupRecoveryPointDetails.add_member(:creation_date, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "CreationDate"))
1220
+ AwsBackupRecoveryPointDetails.add_member(:encryption_key_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "EncryptionKeyArn"))
1221
+ AwsBackupRecoveryPointDetails.add_member(:iam_role_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "IamRoleArn"))
1222
+ AwsBackupRecoveryPointDetails.add_member(:is_encrypted, Shapes::ShapeRef.new(shape: Boolean, location_name: "IsEncrypted"))
1223
+ AwsBackupRecoveryPointDetails.add_member(:last_restore_time, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "LastRestoreTime"))
1224
+ AwsBackupRecoveryPointDetails.add_member(:lifecycle, Shapes::ShapeRef.new(shape: AwsBackupRecoveryPointLifecycleDetails, location_name: "Lifecycle"))
1225
+ AwsBackupRecoveryPointDetails.add_member(:recovery_point_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "RecoveryPointArn"))
1226
+ AwsBackupRecoveryPointDetails.add_member(:resource_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "ResourceArn"))
1227
+ AwsBackupRecoveryPointDetails.add_member(:resource_type, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "ResourceType"))
1228
+ AwsBackupRecoveryPointDetails.add_member(:source_backup_vault_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "SourceBackupVaultArn"))
1229
+ AwsBackupRecoveryPointDetails.add_member(:status, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "Status"))
1230
+ AwsBackupRecoveryPointDetails.add_member(:status_message, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "StatusMessage"))
1231
+ AwsBackupRecoveryPointDetails.add_member(:storage_class, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "StorageClass"))
1232
+ AwsBackupRecoveryPointDetails.struct_class = Types::AwsBackupRecoveryPointDetails
1233
+
1234
+ AwsBackupRecoveryPointLifecycleDetails.add_member(:delete_after_days, Shapes::ShapeRef.new(shape: Long, location_name: "DeleteAfterDays"))
1235
+ AwsBackupRecoveryPointLifecycleDetails.add_member(:move_to_cold_storage_after_days, Shapes::ShapeRef.new(shape: Long, location_name: "MoveToColdStorageAfterDays"))
1236
+ AwsBackupRecoveryPointLifecycleDetails.struct_class = Types::AwsBackupRecoveryPointLifecycleDetails
1237
+
1136
1238
  AwsCertificateManagerCertificateDetails.add_member(:certificate_authority_arn, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "CertificateAuthorityArn"))
1137
1239
  AwsCertificateManagerCertificateDetails.add_member(:created_at, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "CreatedAt"))
1138
1240
  AwsCertificateManagerCertificateDetails.add_member(:domain_name, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "DomainName"))
@@ -4577,6 +4679,9 @@ module Aws::SecurityHub
4577
4679
  ResourceDetails.add_member(:aws_waf_rule, Shapes::ShapeRef.new(shape: AwsWafRuleDetails, location_name: "AwsWafRule"))
4578
4680
  ResourceDetails.add_member(:aws_waf_rule_group, Shapes::ShapeRef.new(shape: AwsWafRuleGroupDetails, location_name: "AwsWafRuleGroup"))
4579
4681
  ResourceDetails.add_member(:aws_ecs_task, Shapes::ShapeRef.new(shape: AwsEcsTaskDetails, location_name: "AwsEcsTask"))
4682
+ ResourceDetails.add_member(:aws_backup_backup_vault, Shapes::ShapeRef.new(shape: AwsBackupBackupVaultDetails, location_name: "AwsBackupBackupVault"))
4683
+ ResourceDetails.add_member(:aws_backup_backup_plan, Shapes::ShapeRef.new(shape: AwsBackupBackupPlanDetails, location_name: "AwsBackupBackupPlan"))
4684
+ ResourceDetails.add_member(:aws_backup_recovery_point, Shapes::ShapeRef.new(shape: AwsBackupRecoveryPointDetails, location_name: "AwsBackupRecoveryPoint"))
4580
4685
  ResourceDetails.struct_class = Types::ResourceDetails
4581
4686
 
4582
4687
  ResourceList.member = Shapes::ShapeRef.new(shape: Resource)
@@ -4731,6 +4836,8 @@ module Aws::SecurityHub
4731
4836
  SoftwarePackage.add_member(:architecture, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "Architecture"))
4732
4837
  SoftwarePackage.add_member(:package_manager, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "PackageManager"))
4733
4838
  SoftwarePackage.add_member(:file_path, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "FilePath"))
4839
+ SoftwarePackage.add_member(:fixed_in_version, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "FixedInVersion"))
4840
+ SoftwarePackage.add_member(:remediation, Shapes::ShapeRef.new(shape: NonEmptyString, location_name: "Remediation"))
4734
4841
  SoftwarePackage.struct_class = Types::SoftwarePackage
4735
4842
 
4736
4843
  SoftwarePackageList.member = Shapes::ShapeRef.new(shape: SoftwarePackage)
@@ -4926,6 +5033,7 @@ module Aws::SecurityHub
4926
5033
  Vulnerability.add_member(:related_vulnerabilities, Shapes::ShapeRef.new(shape: StringList, location_name: "RelatedVulnerabilities"))
4927
5034
  Vulnerability.add_member(:vendor, Shapes::ShapeRef.new(shape: VulnerabilityVendor, location_name: "Vendor"))
4928
5035
  Vulnerability.add_member(:reference_urls, Shapes::ShapeRef.new(shape: StringList, location_name: "ReferenceUrls"))
5036
+ Vulnerability.add_member(:fix_available, Shapes::ShapeRef.new(shape: VulnerabilityFixAvailable, location_name: "FixAvailable"))
4929
5037
  Vulnerability.struct_class = Types::Vulnerability
4930
5038
 
4931
5039
  VulnerabilityList.member = Shapes::ShapeRef.new(shape: Vulnerability)
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::SecurityHub
11
+ # Endpoint parameters used to influence endpoints per request.
12
+ #
13
+ # @!attribute region
14
+ # The AWS region used to dispatch the request.
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @!attribute use_dual_stack
19
+ # When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
20
+ #
21
+ # @return [Boolean]
22
+ #
23
+ # @!attribute use_fips
24
+ # When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
25
+ #
26
+ # @return [Boolean]
27
+ #
28
+ # @!attribute endpoint
29
+ # Override the endpoint used to send this request
30
+ #
31
+ # @return [String]
32
+ #
33
+ EndpointParameters = Struct.new(
34
+ :region,
35
+ :use_dual_stack,
36
+ :use_fips,
37
+ :endpoint,
38
+ ) do
39
+ include Aws::Structure
40
+
41
+ # @api private
42
+ class << self
43
+ PARAM_MAP = {
44
+ 'Region' => :region,
45
+ 'UseDualStack' => :use_dual_stack,
46
+ 'UseFIPS' => :use_fips,
47
+ 'Endpoint' => :endpoint,
48
+ }.freeze
49
+ end
50
+
51
+ def initialize(options = {})
52
+ self[:region] = options[:region]
53
+ self[:use_dual_stack] = options[:use_dual_stack]
54
+ self[:use_dual_stack] = false if self[:use_dual_stack].nil?
55
+ if self[:use_dual_stack].nil?
56
+ raise ArgumentError, "Missing required EndpointParameter: :use_dual_stack"
57
+ end
58
+ self[:use_fips] = options[:use_fips]
59
+ self[:use_fips] = false if self[:use_fips].nil?
60
+ if self[:use_fips].nil?
61
+ raise ArgumentError, "Missing required EndpointParameter: :use_fips"
62
+ end
63
+ self[:endpoint] = options[:endpoint]
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::SecurityHub
11
+ class EndpointProvider
12
+ def initialize(rule_set = nil)
13
+ @@rule_set ||= begin
14
+ endpoint_rules = Aws::Json.load(Base64.decode64(RULES))
15
+ Aws::Endpoints::RuleSet.new(
16
+ version: endpoint_rules['version'],
17
+ service_id: endpoint_rules['serviceId'],
18
+ parameters: endpoint_rules['parameters'],
19
+ rules: endpoint_rules['rules']
20
+ )
21
+ end
22
+ @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
+ end
24
+
25
+ def resolve_endpoint(parameters)
26
+ @provider.resolve_endpoint(parameters)
27
+ end
28
+
29
+ # @api private
30
+ RULES = <<-JSON
31
+ eyJ2ZXJzaW9uIjoiMS4wIiwicGFyYW1ldGVycyI6eyJSZWdpb24iOnsiYnVp
32
+ bHRJbiI6IkFXUzo6UmVnaW9uIiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1bWVu
33
+ dGF0aW9uIjoiVGhlIEFXUyByZWdpb24gdXNlZCB0byBkaXNwYXRjaCB0aGUg
34
+ cmVxdWVzdC4iLCJ0eXBlIjoiU3RyaW5nIn0sIlVzZUR1YWxTdGFjayI6eyJi
35
+ dWlsdEluIjoiQVdTOjpVc2VEdWFsU3RhY2siLCJyZXF1aXJlZCI6dHJ1ZSwi
36
+ ZGVmYXVsdCI6ZmFsc2UsImRvY3VtZW50YXRpb24iOiJXaGVuIHRydWUsIHVz
37
+ ZSB0aGUgZHVhbC1zdGFjayBlbmRwb2ludC4gSWYgdGhlIGNvbmZpZ3VyZWQg
38
+ ZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBkdWFsLXN0YWNrLCBkaXNwYXRj
39
+ aGluZyB0aGUgcmVxdWVzdCBNQVkgcmV0dXJuIGFuIGVycm9yLiIsInR5cGUi
40
+ OiJCb29sZWFuIn0sIlVzZUZJUFMiOnsiYnVpbHRJbiI6IkFXUzo6VXNlRklQ
41
+ UyIsInJlcXVpcmVkIjp0cnVlLCJkZWZhdWx0IjpmYWxzZSwiZG9jdW1lbnRh
42
+ dGlvbiI6IldoZW4gdHJ1ZSwgc2VuZCB0aGlzIHJlcXVlc3QgdG8gdGhlIEZJ
43
+ UFMtY29tcGxpYW50IHJlZ2lvbmFsIGVuZHBvaW50LiBJZiB0aGUgY29uZmln
44
+ dXJlZCBlbmRwb2ludCBkb2VzIG5vdCBoYXZlIGEgRklQUyBjb21wbGlhbnQg
45
+ ZW5kcG9pbnQsIGRpc3BhdGNoaW5nIHRoZSByZXF1ZXN0IHdpbGwgcmV0dXJu
46
+ IGFuIGVycm9yLiIsInR5cGUiOiJCb29sZWFuIn0sIkVuZHBvaW50Ijp7ImJ1
47
+ aWx0SW4iOiJTREs6OkVuZHBvaW50IiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1
48
+ bWVudGF0aW9uIjoiT3ZlcnJpZGUgdGhlIGVuZHBvaW50IHVzZWQgdG8gc2Vu
49
+ ZCB0aGlzIHJlcXVlc3QiLCJ0eXBlIjoiU3RyaW5nIn19LCJydWxlcyI6W3si
50
+ Y29uZGl0aW9ucyI6W3siZm4iOiJhd3MucGFydGl0aW9uIiwiYXJndiI6W3si
51
+ cmVmIjoiUmVnaW9uIn1dLCJhc3NpZ24iOiJQYXJ0aXRpb25SZXN1bHQifV0s
52
+ InR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoi
53
+ aXNTZXQiLCJhcmd2IjpbeyJyZWYiOiJFbmRwb2ludCJ9XX0seyJmbiI6InBh
54
+ cnNlVVJMIiwiYXJndiI6W3sicmVmIjoiRW5kcG9pbnQifV0sImFzc2lnbiI6
55
+ InVybCJ9XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6
56
+ W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQ
57
+ UyJ9LHRydWVdfV0sImVycm9yIjoiSW52YWxpZCBDb25maWd1cmF0aW9uOiBG
58
+ SVBTIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0
59
+ eXBlIjoiZXJyb3IifSx7ImNvbmRpdGlvbnMiOltdLCJ0eXBlIjoidHJlZSIs
60
+ InJ1bGVzIjpbeyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMi
61
+ LCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFsU3RhY2sifSx0cnVlXX1dLCJlcnJv
62
+ ciI6IkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0
63
+ b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0eXBlIjoiZXJyb3Ii
64
+ fSx7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOnsicmVmIjoi
65
+ RW5kcG9pbnQifSwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlw
66
+ ZSI6ImVuZHBvaW50In1dfV19LHsiY29uZGl0aW9ucyI6W3siZm4iOiJib29s
67
+ ZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQUyJ9LHRydWVdfSx7
68
+ ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxT
69
+ dGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
70
+ dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
71
+ Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
72
+ In0sInN1cHBvcnRzRklQUyJdfV19LHsiZm4iOiJib29sZWFuRXF1YWxzIiwi
73
+ YXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQ
74
+ YXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5
75
+ cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2lu
76
+ dCI6eyJ1cmwiOiJodHRwczovL3NlY3VyaXR5aHViLWZpcHMue1JlZ2lvbn0u
77
+ e1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9IiwicHJvcGVy
78
+ dGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlwZSI6ImVuZHBvaW50In1dfSx7
79
+ ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgYW5kIER1YWxTdGFjayBh
80
+ cmUgZW5hYmxlZCwgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBv
81
+ cnQgb25lIG9yIGJvdGgiLCJ0eXBlIjoiZXJyb3IifV19LHsiY29uZGl0aW9u
82
+ cyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNl
83
+ RklQUyJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
84
+ dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
85
+ Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
86
+ In0sInN1cHBvcnRzRklQUyJdfV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6
87
+ W3siY29uZGl0aW9ucyI6W10sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNv
88
+ bmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOiJodHRwczovL3NlY3Vy
89
+ aXR5aHViLWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkbnNTdWZm
90
+ aXh9IiwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlwZSI6ImVu
91
+ ZHBvaW50In1dfV19LHsiY29uZGl0aW9ucyI6W10sImVycm9yIjoiRklQUyBp
92
+ cyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0
93
+ IEZJUFMiLCJ0eXBlIjoiZXJyb3IifV19LHsiY29uZGl0aW9ucyI6W3siZm4i
94
+ OiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRHVhbFN0YWNr
95
+ In0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9u
96
+ cyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJmbiI6
97
+ ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwi
98
+ c3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMi
99
+ Olt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOiJodHRwczov
100
+ L3NlY3VyaXR5aHViLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0
101
+ YWNrRG5zU3VmZml4fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0s
102
+ InR5cGUiOiJlbmRwb2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJyb3Ii
103
+ OiJEdWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9l
104
+ cyBub3Qgc3VwcG9ydCBEdWFsU3RhY2siLCJ0eXBlIjoiZXJyb3IifV19LHsi
105
+ Y29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vc2Vj
106
+ dXJpdHlodWIue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkbnNTdWZmaXh9
107
+ IiwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlwZSI6ImVuZHBv
108
+ aW50In1dfV19
109
+
110
+ JSON
111
+ end
112
+ end